JSP

JSP (Marven, 파일 업로드, JSTL, el)

code2772 2022. 11. 29. 16:00
728x90
반응형

JSP 영역

1. page context(page) 小
현재 처리되고 있는 하나의 페이지 영역
pageContext.setAttribute("변수","값");

2. request(request) 小
객체가 포워드되는 영역에서 사용하는 객체. 요청하고 포워드 하는 과정의 JSP를 request 하는 영역
request.setAttribute("변수","값");

3. session(session) 多
하나의 사용자가 사이트에서 지나가는 모든 페이지 영역에서 개별적으로 사용하는 객체
session.setAttribute("변수","값");

4. application(application)
하나의 사이트에 속해 있는 모든 페이지 영역에서 사용되는 공용 객체
application.setAttribute("변수","값");

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%
        pageContext.setAttribute("text","pageContext 영역의 변수");
        request.setAttribute("text","request 영역의 변수");
        session.setAttribute("text","session영역의 변수");
        application.setAttribute("text","application영역의 변수");
        %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>scope</title>
</head>
<body>
<h2>scope</h2>
<p><%=pageContext.getAttribute("text") %></p>
<p><%=request.getAttribute("text") %></p>
<p><%=session.getAttribute("text") %></p>
<p><%=application.getAttribute("text") %></p>
<hr>
<p>default : ${text}</p> <!--pagecontext가 기본 형  -->
<p>page: ${pageScope.text}</p>
<p>request: ${requestScope.text}</p>
<p>session: ${sessionScope.text}</p>
<p>application: ${applicationScope.text}</p>

</body>
</html>


EL(Expression Language) 표현식
자바빈의 프로퍼티, 값, 액션태그등을 쉽고 간결하게 사용할 수 있도록 하는 기술

 

${} 
1. jsp가 실행될 때 즉시 반영하여 값을 출력
예 : <%=1+1%> -> ${1+1}
2. 파라미터 값을 (매개변수 값) 불러올 때 사용
예 : request.getParameter(name) -> ${param.name} 또는 ${param['name']} 또는  &{param["name"]}

연산자

산술연산
${10+2 }
${10-2 }
${10*2 }
${10/2 }
${10 div 2 }
${10% 2 }
${10 mod 2 }

비교연산
${10 > 2 }
 ${10 gt 2 }
${10 < 2 }
${10 lt 2 }
${10 == 2 }
${10 eq 2 }
 ${10 != 2 }
${10 ne 2 }
${10 >= 2 }
${10 ge 2 }
${10 <= 2 }
${10 le 2 }

논리연산
${true and true}
${true or false}
${not true}

empty연산
${empty 변수}
1. 변수의 값이 null 이면 true
2. 문자열, 배열, Mpa, Collection 객체의 크기가 0이면 true
3. 그 외에는 false

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL</title>
</head>
<body>
<h2>EL</h2>
<p>덧셈 : ${10+2 }</p>
<p>뺄셈: ${10-2 }</p>
<p>곱셈: ${10*2 }</p>
<p>나눗셈: ${10/2 }</p>
<p>나눗셈: ${10 div 2 }</p>
<p>나머지: ${10% 2 }</p>
<p>나머지: ${10 mod 2 }</p>
<p>크다: ${10 > 2 }</p>
<p>크다: ${10 gt 2 }</p>
<p>작다: ${10 < 2 }</p>
<p>작다: ${10 lt 2 }</p>
<p>같다: ${10 == 2 }</p>
<p>같다: ${10 eq 2 }</p>
<p>다르다: ${10 != 2 }</p>
<p>다르다: ${10 ne 2 }</p>
<p>크거나 같다: ${10 >= 2 }</p>
<p>크거나 같다: ${10 ge 2 }</p>
<p>작거나 같다: ${10 <= 2 }</p>
<p>작거나 같다: ${10 le 2 }</p>

<jsp:useBean id="test" class="com.koreait.Eltest"/>
<p>test.getStr() :${test.getStr()} </p>
<p>test.setStr() :${test.setStr("Hello el")} </p>
<p>test.getStr() :${test.getStr()} </p>
<p>test.sum(10,5) :${test.sum(10,5)} </p>
</body>
</html>



JSTL 라이브러리
자바코드를 HTML 태그 형식으로 간편하게 사용하기 위해 나온 라이브러리
https://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 사이트 들어가서
jakarta-taglibs-standard-1.1.2  zip 다운로드

<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%>


JSTL의 종류
1. core tags -  c를 의미 , URI는 사용하기 위한 내용이 있음
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%>
변수 생성, URL 관리, 프로그램의 흐름을 제어

c:out
jsp에서 <%=%> 태그와 유사한 표현식의 결과를 표시

c:import 
상대 또는 절대 URL을 검색하여 내용을 var 문자열, varReader의 Reader 또는 페이지에 표시

c:set
계산 결과를 scope 변수에 설정

c:remove 
특정 범위에서 지정된 범위 변수를 제거할 때 사용

c:if
조건을 테스트하는데 사용되는 조건부 태그, 표현식이 참인 경우에만 내용을 표시

c:choose, c:when, c:itherwise
조건이 true인 경우 본문 내용을 포함하는 간단한 조건부 태그

c:forEach
기본 반복 태그이며 고정된 횟수 또는 초과되는 중첩된 본문내용을 반복

c:redirect
브라우저를 새 URL로 리디렉션함

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL1 - core</title>
</head>
<body>
<h2>JSTL1- core</h2>
<p>출력 : <c:out value ="${'Hello jstl' }"/></p>
<c:set var="userid" value="apple"/>
<p>아이디: ${userid }</p>
<c:set var="memberlist" value ='<%=new String[]{"apple","banana","orangr","melone"} %>'/>
<p>memberlist : ${memberlist }</p>
<p>memberlist : ${memberlist[0] }</p>
<p>memberlist : ${memberlist[1] }</p>
<c:remove var="userid"/>
<p>아이디: ${userid }</p>
<hr>
<c:set var ="userid" value="banana"/>
<c:if test="${userid eq 'banana' }">
<p>userid는 banana 입니다.</p>
</c:if>
<c:if test="${userid eq 'apple' }">
<p>userid는 apple 입니다.</p>
</c:if>
<c:remove var ="userid"/>
<c:if test ="${empty userid }">
<p>userid의 값이 없습니다.</p>
</c:if>
<hr>
<c:set var ="pw" value ="1234"/>
<c:choose>
<c:when test="${ pw eq '1111'}">
<p>비밀번호가 1111</p>
</c:when>
<c:when test="${pw eq '1234'}">
<p>비밀번호가 1234</p>
</c:when>
<c:otherwise>
<p>둘다아님</p>
</c:otherwise>
</c:choose>
<hr>
<%

        String[] studentList = {"김사과", "반하나","오렌지","이메론"};
        pageContext.setAttribute("list", studentList);
        %>
<table border ="1" width="600">
<tr>
<th>index</th>
<th>번호</th>
<th>이름</th>
</tr>
<c:forEach var="student" items ="${list}" varStatus="status">
<tr>
<td>${status.index}</td>
<td>${status.count}</td>
<td>${student}</td>
</tr>
</c:forEach>
</table>
<hr>
<c:forEach var = "i" begin="1" end="10" step="1">
        ${i}<br>
</c:forEach>
</body>
</html>



2. formatting
메시지, 번호 및 날짜 등을 지원
<%@ taglib prefix="fmt" uri ="http://java.sun.com/jsp/jstl/fmt"%>

fmt:parsNumber
통화, 백분율 또는 숫자의 문자열을 표현, 분석하는데 사용

fmt:formatNumber
특정 형식 또는 정밀도로 숫자값을 형식화 하는데 사용

fmt:parseDate
시간과 날짜의 문자열 표현을 분석하는데 사용

fmt:formatDate
제공된 패턴 및 스타일을 사용하여 시간 및 또는 날짜를 형식화

fmt:setTimeZone
시간대 구성 변수내에 시간을 저장

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL formatting</title>
</head>
<body>
<h2>JSTL formatting</h2>
<p><fmt:formatNumber value="1234.5678"/></p>
<p><fmt:formatNumber value="50000"/></p>
<p><fmt:formatNumber value="50000" type="currency"/></p>
<p><fmt:formatNumber value="50000" type="currency" currencySymbol="$"/></p>

<p><fmt:formatNumber value="0.1" type ="percent"/></p>

<%
        request.setAttribute("now", new Date());
        %>
<p><fmt:formatDate value="${now}"/></p>
<p><fmt:formatDate value="${now}" type ="date"/></p>
<p><fmt:formatDate value="${now}" type ="time"/></p>
<p><fmt:formatDate value="${now}" type ="boths"/></p>
</body>
</html>



3. function
문자열 조작 및 문자열 길이를 지원
<%@ taglib prefix="fn" uri ="http://java.sun.com/jsp/jstl/functions"%>

fn:contains()
지정된 하위 문자열을 포함하는 입력 문자열을 테스트하는데 사용

fn:indexOf()
지정된 하위 문자열이 처음 나타나는 문자열 내에서 인덱스를 반환

fn:split()
문자열을 하위 문자열 배열로 분할

fn:endsWidh()
입력 문자열이 지정된 접미어로 끝나는지 테스트

fh:trim()
문자열의 양쪽 끝 공백을 제거

fn:toLowerCase()
문자열의 모든 문자를 소문자로 변환

fn:toUpperCase()
문자열의 모든 문장를 대문자로 변환

fn:substring()
주어진 문자열 시작 및 끝 위치에 따라 문자열의 일부를 반환

fn:length()
문자열 내부의 문자 수또는 컬렉션의 항목수를 반환

fn:replace()
모든 문자열을 다른 문자열 시퀀스로 변환

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri ="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl - functions</title>
</head>
<body>
<h2>jstl - functions</h2>
<p>${fn:length('1234567890') }</p>
<p>${fn:indexOf('jstl 예제','s') }</p>
<p>${fn:trim('       jstl 예제    ') }</p>
<p>${fn:substring('jstl 예제 ', 0,3) }</p>
<p>${fn:replace('jstl 예제 ', 'jstl','jsp') }</p>
<c:set var="arr" value="${fn:split('j,s,t,l', ',') }" />
<c:forEach var="ch" items="${arr}" varStatus="i">
<p>${i.count }:${ch}</p>
</c:forEach>
</body>
</html>



Maven Project
- Apache Maven은 자바용 프로젝트 관리도구
- 라이브러리를 특정 문서 (pom.xml)에 정의해 놓으면 네트워크를 통해 라이브러리를 자동으로 다운받아 관리
- 라이브러리 관리가 용이
- war, jar 파일 기반의 배포용으로 자주 사용


다이나믹 웹 프로젝트 -> 마우스 우클릭 -> configure -> convert to baven project

porm.xml 생성됨

Maven Repository
https://mvnrepository.com/

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Day6</groupId>
<artifactId>Day6</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.31</version>
</dependency>

<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jfinal/cos -->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>cos</artifactId>
<version>2020.4</version>
</dependency>


</dependencies>
</project>



파일 업로드
- jsp에서 cos 라이브러리 사용(https://mvnrepository.com/artifact/com.jfinal/cos/2020.4
)

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일업로드</title>
</head>
<body>
<h2>파일업로드</h2>
<form method="post" action="6_fileupload_ok.jsp" enctype ="multipart/form-data">
<p>파일이름: <input type = "text" name="title"</p>
<p>이미지: <input type = "file" name="image"</p>
<p><button>전송</button></p>
</form>
</body>
</html>









<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%
        MultipartRequest mr = new MultipartRequest(request, request.getRealPath("/image"),
        1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
        String fileName = mr.getFilesystemName("image");
        %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일 업로드</title>
</head>
<body>
<p>파일 업로드 되었습니다</p>
<p>저장되는 실제 경로: <%=request.getRealPath("/image")%></p>
<p>사진 파일이름: <%=fileName%></p>
</body>
</html>

파일 삭제

<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<%@ page import ="java.io.File" %>
<%
        String deleteImg ="bg.jpg";

        String deleteImgFullPath = request.getRealPath("/image/") +deleteImg;
        File img = new File(deleteImgFullPath);

        if(img.exists() && img.isFile()){
        img.delete();
        }
        %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>file delete</title>
</head>
<body>
<h2>file delete</h2>
<p>파일이 정상적으로 삭제되었습니다.</p>
</body>
</html>



반응형