개발입문/Servlet&JSP
[헤드퍼스트 Servlet&Jsp] 9-1. JSTL: JSP 표준 태그 라이브러리
haloaround
2017. 3. 2. 00:16
언어를 배울 때 가장 기본이 되는 기능들에 대해서 JSP로 대응할 수 있도록 구현해 놓은것이 바로 JSP 표준 태그 라이브러리 이다. 만약 더 정교한 기능이 필요하다면 커스텀 태그 라이브러리를 (핸들러를 직접 구현해서) 활용할 수 있다.
학습목표
taglib 지시자 문법과 의미
JSP 표준 태그 라이브러리
커스텀 태그 라이브러리 파일
Docs: http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/index.html
각 태그 마다 필수 옵션, 선택 옵션이 있는데,
사실 java 문법을 한번만 공부했어도 쉽게 접근할 수 있는 개념들이었다. ;)
JSP Core Library 등록
코어 라이브러리 사용 등록
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
출력
출력 c:out
<c:out value="" [escapeXML=""] [default=""] >
XML 엔티티를 문자로 출력하려면 escapeXml false (default true)
<c:out value='${pageContent.rawHTML}' escapeXml='false' />
변수가 NULL 일 경우 다른 default 값을 출력
<c:out value='${user}' default='guest' />
<c:out value='${user}'>
guest
</c:out>.</b>
루핑 Loop
for 루핑 Looping <c:forEach>
<c:forEach var="" items="" >
${varValue}
</c:forEach>
<table>
<c:forEach var="movie" items="${movieList}" >
<tr>
<td>${movie}</td>
</tr>
</c:forEach>
</table>
<c:forEach var="movie" items=${movieList}" varStatus="movieLoopCount" >
... Count: ${movieLoopCount.count}
LoopTagStatus 객체, count 프로퍼티
if/else 조건문
조건문
<c:if> if(true) { }
<c:choose> switch () { }
<c:when> case1: case2:
<c:otherwise> else { }
<c:if test="${userProf='safety'}">
Our breaks will never lock up. (...)
</c:if>
<c:choose>
<c:when test="${userProf='maintenance'}">
you won't have to service these brakes for at least three years.
</c:when>
<c:otherwise>
Our brakes are the best.
</c:otherwise>
</c:choose>
변수 설정 set
변수 설정 / javaBean, Map 설정
<c:set [var=""] [scope=""] [value=""] />
<c:set [target=""] [property=""] [value=""] />
target 은 JavaBean 이거나 Map !
<c:set var="userLevel" scope="session" value="cowboy" />
<c:set var="userLevel" scope="session">
Sheriff, Bartender, Cowgirl
</c:set>
<c:set target="${PetMap}" property="dogName" value="Clover" />
<c:set target="${person} property="name" >
${foo.name}
</c:set>
변수 삭제 remove
[remove 변수 삭제]
<c:remove var="" [scope=""] />
<c:remove var="userStatus" scope="request" />
자원 임포트 import
[import 컨텐츠 포함(내부, 외부자원 모두)]
<c:import url="">
<c:param name="" value="">
</c:import>
<c:import url="Header.jsp">
<c:param name="subTitle" value="We take the sting out of SOAP." />
</c:import>
url 하이퍼링크 관련 url
[하이퍼링크]
<c:url value="" [var=""]>
URL 재작성 ok / URL 인코딩 no!
<a href="<c:url value="/inputComments.jsp" />"Click here</a>
<c:url value="/inputComments.jsp" var="inputURL" >
<c:param name="firstName" value="${first}" />
<c:param name="secondName" value="${second}" />
</c:url>
에러 처리 c:catch
[표준 오류 핸들링 매커니즘]
예외사항이 발생하는 페이지에서 --- 오류 처리용 페이지로
<c:remove var="" [scope=""] />
1. DD 의 <error-page>
모두 다 적용되는 (디폴트) 오류페이지 선언
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorPage.jsp</location>
</error-page>
특정 예외사항에 대한 오류페이지 선언
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/errorPage.jsp</location>
</error-page>
HTTP 상태 코드에 따라 다르게 오류페이지 선언
<error-page>
<error-code>404</error-code>
<location>/notFoundException.jsp</location>
</error-page>
2. JSP errorPage
iserrorPage = True 인 페이지만 exception 내장객체 사용가능
exception의 type은 "java.lang.Throwable"
<%@ page isErrorPage="true" %>
<html><body>
You caused a ${pageContext.exception}. <br> (...)
3. <c:catch>
오류가 생길위험이 있는 코드를 <c:catch>로 감싼다. 그 코드가 없던 것처럼 진행된다.
<c:catch> 태그가 끝나고 난 다음에도 나중에 Exception 객체를 다루고 싶다면 var 속성 이용
<c:catch [var="" />
<c:catch var="myException" >
<% int x=10/0; %>
</c:catch>
<c:if test="${myException!=null}">
There was an exception: ${myException.message}
</c:if>
JSTL core Tag Library 를 살펴보았으니.
docs 을 좀더 자세히 읽어봐야겠다 :0