JSTL (JSP Standard Tag Library)
http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
1. 위 사이트에서 JSTL 을 다운 받습니다.
2. 압축을 풀고 lib 디렉토리 안의 jstl.jar 와 standard.jar 를 복사합니다.
3. Tomcat 의 디렉토리 내의 common\lib 안에 복사 해놓고 쓰면 됩니다.
<%@ taglib prefix="c" uri="java.sun.com/jsp/jstl/core" %> 와 같이 선언하면 됩니다.
기본적인 기능
<%@ taglib prefix="c" uri="java.sun.com/jsp/jstl/core" %>
XML 처리
<%@ taglib prefix="x" uri="java.sun.com/jsp/jstl/xml" %>
국제화와 형식화
<%@ taglib prefix="fmt" uri="java.sun.com/jsp/jstl/fmt" %>
데이터베이스 작업
<%@ taglib prefix="sql" uri="java.sun.com/jsp/jstl/sql" %>
JSTL 설치
- 톰캣 설치기 설치 옵션에서 Examples를 선택하면 설치되는 예제 애플리케이션에 들어있음
- 위치 : webapps/jsp-examples/WEB-INF/lib/jstl.jsr
- 위의 파일을 WEB-INF/lib 디렉토리에 복사
스크립팅 없이 루핑 돌리기
<c:forEach>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <c:forEach var="movie" items="${movieList}" varStatus="movieLoopCount" >
-
<tr>
-
<td>${movie} </td>
-
<td>${movieLoopCount.count}</td>
-
</tr>
- </c:forEach>
var : 컬렉션에 있는 각각 항목을 나타내는 변수로, 한번 회전할 때마다 값이 바뀝니다.
items : 루핑을 돌 실제 데이터(배열, 컬렉션, 맵 또는 콤마 분리 문자열)
varStatus : 루핑 횟수 알기
배열을 불러올때는 ${param.movieList} 가 아닌 ${paramValues.movieList}로 items에 저장해야 한다.
<c:forEach>안에 <c:forEach>품기
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <c:forEach var="listElement" items="${movies}" varStatus="movieLoopCount" >
- <c:forEach var="movie" items="${listElement}">
-
<tr>
-
<td>${movie} </td>
-
<td>${movieLoopCount.count}</td>
-
</tr>
- </c:forEach>
- </c:forEach>
속성 : begin, end, step
조건문
<c:if>
- <c:if test="${userType eq 'member'}:>
-
<jsp:include page="inputComments.jsp" />
- </c:if>
<c:choose>, <c:when>, <c:otherwise>
- <c:choose>
-
<c:when test="${userPref == 'preformance'}">
-
go 1
-
</c:when>
-
<c:when test="${userPref == 'preformance'}">
-
go 2
-
</c:when>
-
<c:otherwise>
-
go 3
-
</c:otherwise>
- </c:choose>
속성 입력
<c:set>
- <c:set var="userLevel" scope="session" value="Cowboy" />
- <c:set var="userLevel" value="${person.dog}" />
- <c:set var="userLevel" scope="session">
-
Sheriff, Bartender, Cowgirl
- </c:set>
- var : session 생존범위에 "userLevel" 이란 이름의 속성이 없으면 <c:set> 태그는 하나를 새로 만듭니다.
- scope : 옵션값
- value : 꼭 문자열일 필요는 없습
- 기타 : value가 널 인경우 변수는 제거됩니다.
빈과 맵에 <c:set> 태그 사용하기
<c:set> 태그는 빈 프로퍼티와 맵 값 두 가지 경우에만 동작합니다.
리스트나 배열에 값을 추가하기 위해서 사용할 수 없슴
- <c:set target="${petMap} property="dogName" value="Clover" />
- // target은 널이어서는 안 됩니다.
- // target이 맵인 경우 dogName은 키 이름이 됩니다
- // target이 빈인 경우 dogName은 프로퍼티 이름이 됩니다.
- <c:set target="${person}" property="name" >
- // target 속성에 id 이름을 기입하면 안됩니다.
-
${foo.name}
-
// 몸체 안에는 문자열 또는 표현식이 들어갈 수 있습니다.
- </c:set>
target 속성에는 객체(Object)가 들어가야 합니다. 빈이나 맵의 "id" 이르을 쓰면 안됩니다.
scope 속성을 명기하지 않으면?
컨테이너는
- page
- request
- session
- application(context)
순으로 찾음, 못 찾을 경우 page 생존범위로 해서 하나를 새로 만듬
<c:remove> 로 속성 제거하기
- <c:remove var="userStatus" scope="request" />
- // var 속성에는 문자열을 넣어야함. 표현식을 넣으면 안됨
<c:import> 로 컨텐츠 포함
- <c:import url="http://www.lazyartist.co.kr"/>
요청이 들어오는 시점에 url 속성에 명기한 파일을 현재 컨텐츠에 포함합니다.
<c:import>는 외부 자원도 포함할 수 있습니다.
<c:param> 으로 포함될 파일 동적 변화 시키기
- <c:import url="header.jsp">
-
<c:param name="subTitle" value="we take the String" />
- </c:import>
포함될 파일에
- ${param.subTitle}
<c:url>로 url 재작성
- <a href="<c:url value='/imputComments.jsp' />
- // value에 들어있는 상대경로 뒤에 jsessionid를 추가합니다.(쿠키를 사용하지 못 하는 경우)
url 인코딩
- <c:url value='/imputComments.jsp' var="inputURL" />
-
<c:param name="firstName" value="${first}" />
-
<c:param name="lastName" value="${last}" />
-
// param 태그를 사용합으로써 url인코딩까지 해준다.(공백에 +를 넣어줌)
-
</c:url>
- <a href="${inputURL}">
오류 페이지 설정
오류 페이지에서만 쓸 수 있는 객체 : exception
- <%@ page isErrorPage="true" %>
- ${pageContext.exception}
오류 발생 후 오류 페이지로 이동하지 않고 자체 페이지에서 해결하기 : <c:catch>
- <c:catch>
-
<% int x = 10/0; %>
-
// 에러가 발생하면 다음을 실행하지 않고 </c:catch>로 곧장 이동한다.
- </c:catch>
exception을 속성으로 만들어 에러 메시지 읽기
- <c:catch var="myException">
-
...
- </c:catch>
- ${myException.message}
- // 타입이 Throwable이니 message프로퍼티가 있음
JSTL API
코어(Core) 라이브러리
-
일반적인 것
- <c:out>
- <c:set>
- <c:remove>
- <c:catch>
-
조건
- <c:if>
- <c:choose>
- <c:when>
- <c:otherwise>
-
URL 관련
- <c:import>
- <c:url>
- <c:redirect>
- <c:param>
-
반복
- <c:forEach>
- <c:forEachToken>
포맷팅 라이브러리
-
국제화
- <fmt:message>
- <fmt:setLocale>
- <fmt:bundle>
- <fmt:setBundle>
- <fmt:param>
- <fmt:requestEncoding>
-
포맷팅
- <fmt:timeZone>
- <fmt:setTimeZone>
- <fmt:formatNumber>
- <fmt:parseNumber>
- <fmt:parseData>
SQL 라이브러리
-
데이터베이스 접근
- <sql:query>
- <sql:update>
- <sql:setDataSource>
- <sql:param>
- <sql:dataParam>
XML 라이브러리
-
코어 xml 액션
- <x:parse>
- <x:out>
- <x:set>
-
xml 흐름 제어
- <x:if>
- <x:choose>
- <x:when>
- <x:otherwise>
- <x:forEach>
-
변환 액션
- <x:transform>
- <x:param>