05.JSP2009. 1. 19. 10:28
반응형

JSTL (JSP Standard Tag Library)


http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

 

1. 위 사이트에서 JSTL 을 다운 받습니다.

2. 압축을 풀고 lib 디렉토리 안의 jstl.jarstandard.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>

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <c:forEach var="movie" items="${movieList}" varStatus="movieLoopCount" >
  3. <tr>

  4. <td>${movie} </td>

  5. <td>${movieLoopCount.count}</td>

  6. </tr>

  7. </c:forEach>

var : 컬렉션에 있는 각각 항목을 나타내는 변수로, 한번 회전할 때마다 값이 바뀝니다.

items : 루핑을 돌 실제 데이터(배열, 컬렉션, 맵 또는 콤마 분리 문자열)

varStatus : 루핑 횟수 알기


배열을 불러올때는 ${param.movieList} 가 아닌 ${paramValues.movieList}로 items에 저장해야 한다.


<c:forEach>안에 <c:forEach>품기

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <c:forEach var="listElement" items="${movies}" varStatus="movieLoopCount" >
  3. <c:forEach var="movie" items="${listElement}">
  4. <tr>

  5. <td>${movie} </td>

  6. <td>${movieLoopCount.count}</td>

  7. </tr>

  8. </c:forEach> 
  9. </c:forEach>

속성 : begin, end, step


조건문

<c:if>

  1. <c:if test="${userType eq 'member'}:>
  2. <jsp:include page="inputComments.jsp" />

  3. </c:if>

<c:choose>, <c:when>, <c:otherwise>

  1.  <c:choose>
  2. <c:when test="${userPref == 'preformance'}">

  3. go 1

  4. </c:when>

  5. <c:when test="${userPref == 'preformance'}">

  6. go 2

  7. </c:when>

  8. <c:otherwise>

  9. go 3

  10. </c:otherwise>

  11. </c:choose>


속성 입력

<c:set>

  1. <c:set var="userLevel" scope="session" value="Cowboy" />
  2. <c:set var="userLevel" value="${person.dog}" />
  3. <c:set var="userLevel" scope="session">
  4. Sheriff, Bartender, Cowgirl

  5. </c:set>
  1. var : session 생존범위에 "userLevel" 이란 이름의 속성이 없으면 <c:set> 태그는 하나를 새로 만듭니다.
  2. scope : 옵션값
  3. value : 꼭 문자열일 필요는 없습
  4. 기타 : value가 널 인경우 변수는 제거됩니다.

빈과 맵에 <c:set> 태그 사용하기

 <c:set> 태그는 빈 프로퍼티와 맵 값 두 가지 경우에만 동작합니다.

리스트나 배열에 값을 추가하기 위해서 사용할 수 없슴

  1. <c:set target="${petMap} property="dogName" value="Clover" />
  2. // target은 널이어서는 안 됩니다.
  3. // target이 맵인 경우 dogName은 키 이름이 됩니다
  4. // target이 빈인 경우 dogName은 프로퍼티 이름이 됩니다.
  5. <c:set target="${person}" property="name" >
  6. // target 속성에 id 이름을 기입하면 안됩니다.
  7. ${foo.name}

  8. // 몸체 안에는 문자열 또는 표현식이 들어갈 수 있습니다.

  9. </c:set>

 target 속성에는 객체(Object)가 들어가야 합니다. 빈이나 맵의 "id" 이르을 쓰면 안됩니다.


scope 속성을 명기하지 않으면?

컨테이너는

  1. page 
  2. request 
  3. session 
  4. application(context) 

순으로 찾음, 못 찾을 경우 page 생존범위로 해서 하나를 새로 만듬


<c:remove> 로 속성 제거하기

  1. <c:remove var="userStatus" scope="request" /> 
  2. // var 속성에는 문자열을 넣어야함. 표현식을 넣으면 안됨


<c:import> 로 컨텐츠 포함

  1. <c:import url="http://www.lazyartist.co.kr"/>

요청이 들어오는 시점에 url 속성에 명기한 파일을 현재 컨텐츠에 포함합니다.

<c:import>는 외부 자원도 포함할 수 있습니다.


<c:param> 으로 포함될 파일 동적 변화 시키기

  1. <c:import url="header.jsp">
  2. <c:param name="subTitle" value="we take the String" />

  3. </c:import>

 포함될 파일에

  1. ${param.subTitle} 


<c:url>로 url 재작성

  1. <a href="<c:url value='/imputComments.jsp' />
  2. // value에 들어있는 상대경로 뒤에 jsessionid를 추가합니다.(쿠키를 사용하지 못 하는 경우)

url 인코딩

  1. <c:url value='/imputComments.jsp' var="inputURL" />
  2. <c:param name="firstName" value="${first}" />

  3. <c:param name="lastName" value="${last}" />

  4. // param 태그를 사용합으로써 url인코딩까지 해준다.(공백에 +를 넣어줌)

  5. </c:url>


  6. <a href="${inputURL}">


오류 페이지 설정

오류 페이지에서만 쓸 수 있는 객체 : exception

  1. <%@ page isErrorPage="true" %>
  2. ${pageContext.exception}

오류 발생 후 오류 페이지로 이동하지 않고 자체 페이지에서 해결하기 : <c:catch>

  1. <c:catch>
  2. <% int x = 10/0; %>

  3. // 에러가 발생하면 다음을 실행하지 않고 </c:catch>로 곧장 이동한다.

  4. </c:catch>

exception을 속성으로 만들어 에러 메시지 읽기
  1. <c:catch var="myException">
  2. ...

  3. </c:catch>
  4. ${myException.message}
  5. // 타입이 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>
Posted by 1010