클라이언트와 서버 사이에서 request와 response 객체를 먼저 받아
사전작업 / 사후작업웹 브라우저가 필요한 서블릿 호출 > 필터가 대신 호출되어 전달받은 정보 수정 > 서블릿에게 전달 (일종의 경유지 역할)
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 서블릿 가기 전
request.setCharacterEncoding("utf-8");
System.out.println("필터 인코딩 완료");
chain.doFilter(request, response);
System.out.println("서블릿 수행 완료");
// 서블릿 다녀온 후
}
web.xml : 배포서술자
welcome-file 아래 다음과 같은 인코딩 필터를 추가하여 모든 서블릿에 적용 가능
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>common.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
XML 기술을 이용하여 기존의 JSP 문법을 확장하는 메커니즘 제공
jsp:include
: 현재 페이지에 특정 페이지를 포함할 때 사용
<jsp:include page="./header.jsp"/>
jsp:forward
: 하나의 JSP페이지에서 다른 JSP페이지로 요청 전달할 때 사용 (URL 변경 없음)
<jsp:forward page="파일명">
jsp:param
: include/forward의 하위요소, 해당페이지에 전달할 값을 기록할 때 사용
jsp:useBean
: class를 참조하여 빈 객체 생성, setProperty와 getProperty로 값을 저장 조회
jsp:setProperty
: java 객체 사용 시, setter
jsp:getProperty
: java 객체 사용 시, getter
Expression Language
JSP에 쓰이는 JAVA코드를 간결하게 사용하는 방법으로 화면에 표현하고자 하는 코드를 ${value} 형식으로 표현하여 작성
ex ) <%= request.getParameter("name")%>
> ${param.name}
request.setAttribute("name", "랏데");
request.setAttribute("age", 3);
request.setAttribute("addr", "서울");
<td>${name }</td>
<td>${age }</td>
<td>${addr }</td>
<li>이름 : ${m.name }</li> <!-- 직접 접근이 아닌 getter -->
<li>나이 : ${m.age }</li>
<li>주소 : ${m.addr }</li>
데이터가 null일 경우 결과 출력하지 않음
<h2>배열사용방법</h2>
<p>${numArr[0] }</p>
<p>${numArr[1] }</p>
<h2>리스트 사용방법</h2>
<p>${numList[0] }</p>
<p>${numList[1] }</p>
<h2>리스트 사용방법2</h2>
<p>${memberList[0].name }</p>
<p>${memberList[0].age }</p>
<p>${memberList[0].addr }</p>
<p>${memberList[1].name }</p>
<p>${memberList[1].age }</p>
<p>${memberList[1].addr }</p>
동일하게 대괄호[]로 가져온다
<h1>request data</h1>
<p>${m.name }</p>
<p>${m.age }</p>
<p>${m.addr }</p>
<h1>session data</h1>
<p>${sessionScope.m.name }</p>
<p>${sessionScope.m.age }</p>
<p>${sessionScope.m.addr }</p>
request의 사용빈도가 가장 높으므로, session에 붙이는 게 일반적이다
<table>
<tr>
<td>${num1 != num2 }</td>
<td>${num1 ne num2 }</td>
</tr>
<tr>
<td>${num1 == num2 }</td>
<td>${str eq "abc"}</td>
</tr>
<tr>
<td>\${str == null }</td>
<td>${empty str }</td>
</tr>
<tr>
<td>\${str == null }</td>
<td>${empty str }</td>
</tr>
<tr>
<td>\${str1 == null }</td>
<td>${empty str }</td>
</tr>
</table>
<%--
> > gt(greater)
< > lt(little)
>= > ge(greater or equal)
<= > le(little or equal)
== > eq(equal)
!= > ne(not equal)
--%>
JSP Standard Tag Library
JSP에서 사용하는 커스텀 태그로 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화하여 표준으로 제공한 것
jstl-1.2.jar
<%@ taglib uri=http://java.sun.com/jsp/jstl/core” prefiex=“c” %>
<c:out value="${welcome}"/>
<c:set>
변수선언
<h3>1. 변수선언(기본변수 선언으로 해당 페이지에서만 사용 가능)</h3>
<c:set var="newVar1" value="1" />
<c:set var="newVar2" value="안녕하세요" />
<p>request : ${requestScope.newVar1 }</p>
<p>session : ${sessionScope.newVar1 }</p>
<p>page : ${pageScope.newVar1 } </p>
결과 >
request :
session :
page : 1
{newVar1 } 범위가 page이기 때문에 작은 쪽이라 생략해도 나오지만, ${pageScope.newVar2 } request를 생략하기 때문에 쓰는 게 정석
<h3>2. 변수선언 (범위 지정)</h3>
<c:set var="num1" value="10" scope="request"/>
<c:set var="num1" value="100" scope="session"/>
<p>request : ${num1 }</p>
<p>session : ${sessionScope.num1 }</p>
<c:remove>
변수삭제
<c:remove var="num1" scope="session"/>
<p>request : ${num1 }</p>
<p>session : ${sessionScope.num1 }</p>
session으로 지정했던 num1 값만 삭제
<c:out>
<h3>core를 이용한 출력</h3>
<p>EL : ${num1 }</p>
<p>core : <c:out value="${num1 }"/></p>
<p>EL : ${sessionScope.num1 }</p>
<p>core : <c:out value="${sessionScope.num1 }" default="값이 없음"/></p>
<c:set var="test" value="<b>진한글씨</b>" />
<p>EL : ${pageScope.test} </p>
<p>core1 : <c:out value="${pageScope.test }" escapeXml="true"/></p>
<p>core2 : <c:out value="${pageScope.test }" escapeXml="false"/></p>
<c:if>
<c:if test="${num%2 eq 0 }">
<h3>짝수</h3>
</c:if>
<c:if test="${num%2 eq 1 }">
<h3>홀수</h3>
</c:if>
<c:choose>
<c:if test="${num%2 eq 0 }">
<h3>짝수</h3>
</c:if>
<c:if test="${num%2 eq 1 }">
<h3>홀수</h3>
</c:if>
<c:choose>
<c:when test="${num%5 == 0 }">
<h1>5의 배수입니다</h1>
</c:when>
<c:when test="${num%3 == 0 }">
<h1>3의 배수입니다</h1>
</c:when>
<c:when test="${num%4 == 0 }">
<h1>4의 배수입니다</h1>
</c:when>
<c:otherwise>
<h1>5의 배수가 아닙니다</h1>
</c:otherwise>
</c:choose>
<c:forEach>
배열순회
<table border="1">
<tr>
<th>순서</th><th>이름</th><th>나이</th><th>주소</th>
</tr>
<c:forEach items="${memberList }" var="m" varStatus="i">
<tr>
<td>${i.count }</td>
<td>${m.name }</td>
<td>${m.age }</td>
<td>${m.addr }</td>
</tr>
</c:forEach>
</table>
반복회차 가진 반복문
<%--
for(int i=0;i<10;i++)
--%>
<ul>
<c:forEach begin="0" step="1" end="9" varStatus="i">
<li>${i.index }번째 index 출력 반복문</li>
</c:forEach>
</ul>
<ul>
<c:forEach begin="0" step="1" end="9" varStatus="i">
<li>${i.count }번째 count 출력 반복문</li>
</c:forEach>
</ul>