[책펌] JSTL 문법 정리 (기본, core)

By | 1월 16, 2009

* taglib 선언

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

* 변수의 선언

<c:set var="t" value="hello"/>

<c_rt:set var="color" value="<%=abc%>"/> 
  => 이 경우 c_rt 대신 c 를 사용하면 <%= %>을 포함한 문자열로 인식해 버린다.

<c:set var="hit" value="1" scope="session"/>
  => session 스코프 내에서 살아있는 변수가 된다.

<c:set value="value" target="target" property="propertyName"/>
  => 속성 value로 target객체의 프로퍼티 값을 정한다.

<c:set target="target" property="propertyName">
    body content
</c:set>
  => body 값으로 target객체의 프로퍼티 값을 정한다.

  => Scope : page | request | session | application

* 변수의 제거

<c:remove var="name" scope="session"/>

* forEach 예문 (보통의 for문 & 개선된 루프)

<c:forEach items="${pageScope }" var="h">
 <c:out value="${h }"/>
</c:forEach>
  => 위의 예문은 pageScope EL내장객체의 모든 요소를 루프를 통해 뽑아내어 출력하는 문장이다.

<c:forEach var="h" items="${header}">
 <c:out value="${h.key}:${h.value }"/><br>
</c:forEach>
  => 위의 예문은 header 내장객체의 모든 요소를  key와  value로 구분하여 출력하는 문장이다.

<c:forEach var="one" begin="1" end="10" step="1">
 <c:out value="${one}"/>
</c:forEach>
 => 위의 예문은 반복할 횟수를 직접 지정하여 루프를 돌리는 문장이다. (var, step은 생략가능)

<c:forEach items="${color }" varStatus="i">
 <c:out value="${i.count }"/>
 <c:out value="${color[i.index] }"/><br/>
</c:forEach>
  => 위의 예문은 카운트숫자 i 를 설정하여 for 문을 돌리는 문장이다.

<c:forEach varStatus='i' var="cart" items="${cartList}">
 ${cart.userNum}
 ${cart.prodNum}
</c:forEach>
  => 위의 예문은 List객체 cartList 에서 각 요소를 뽑아 for문을 돌리는 문장이다.
      items는 List객체 자체를 받아서 루프의 구조를 만든다.
      var는 List로 묶여있던 각각의 요소 객체를 참조하게 해 주는 이름이다.

<c:forEach items="${codeMap}" var="map">
${map.key1}:${map.key2}
</c:forEach>
  => 
위의 예문은 Map객체 codeMap 에서 각 요소를 뽑아 for문을 돌리는 문장이다. 

* forTokens 예문 (StringTokenizer)

<c:forTokens var="one" items="서울|인천,대구,부산,찍고" delims="," varStatus="sts">
 <c:out value="${sts.count }:${one}"/>&middot;
</c:forTokens>
  => forTokens 역시 begin, step, end 를 지정할 수 있고, varStatus는 생략가능하다.


* IF 예문

<c:if test="${emptyhit }">
 <c:set var="hit" value="1" scope="session"/>
 세션에 값을 저장하였습니다.
</c:if>
  => empty는 NULL을 판별하는 EL연산자이다.
  => hit 이라는 변수가 NULL 이면 session 스코프에 1이라는 값으로 hit 변수를 생성하는 코드.
  => empty hit 대신에 empty sessionScope.hit 으로 해도 동일한 결과를 얻을 수 있다.

* <c:out> - System.out.println()

1. body가 없는 경우
   <c:out value="value"  [escapeXml="{true|false}"]  [default="기본값"] />

2. body가 있는 경우
   <c:out value="value"  [escapeXml="{true|false}"] >
      기본값
   </c:out>

  => escapeXml 속성은 값 중에 포함된 < > & ' " 문자들을 각각 &lt;  &gt;  &amp;  &#039;  &#034; 로 출력한다. 
      생략할 경우 true가 기본값이다.
  => NULL 값의 처리에 대해서 JSP에서는 "null" 문자열로 출력되었던 것에 비해 JSTL의 스펙에서는 빈문자열("")
      또는 기본값으로 처리한다고 명시되어 있다.

* <c:catch/> : Try~Catch

<c:catch var="errmsg">
line1
<%=1/0 %> => 에러가 나는 코드
line2
</c:catch>
<c:out value="${errmsg }"/>

  => 시작 catch 태그에 변수를 선언하면 그 변수에 Exception의 내용이 들어가게 된다.

* <c:choose/>, <c:when test=""/>, <c:otherwise/> : IF~ELSE, SWITCH

<c:choose>
 <c:when test="${empty param.name}">
  <form>
   이름을 적어주세요
   <input type="text" name="name">
   <input type="submit" value="확인">
  </form>  
 </c:when>
 <c:when test="${param.name=='admin' }">
  안녕하세요 관리자님.
 </c:when>
 <c:otherwise>
  안녕하세요. <c:out value="${param.name}"/>님.
 </c:otherwise>
</c:choose>

* <c:import/>

   - 웹어플리케이션 내부의 자원접근은 물론이고, http, ftp 같은 외부에 있는 자원도 가져와서 페이지
    내에 귀속
시킨다.  자유롭게 가공할 수도 있고, 편집도 가능하다.
   - 스트림으로 받아와서 파일로 저장하거나, DB에 입력할 수도 있도록 되어 있다.

<c:set var="url" value="http://www.google.co.kr"/>
<c:import url="${url}" var="u"/> => URL에 해당하는 페이지에 있는 모든 요소를 변수에 할당함.
<c:out value="${url }"/> 가져옵니다.

<base href="<c:out value='${url }'/>"> => base 태그는 해당 URL을 기반으로 상대경로화 하므로 이미지가
                                                            깨지지 않도록 만들어 준다.

 <c:out value="${u }" escapeXml="false"/> => 위에서 만든 변수를 출력하면 모든 코드가 출력된다.
</base>                                                      escapeXml="false" 로 해야 화면이 제대로 보인다.

* <c:url/> : request.getContextPath()

<img src="<c:url value="/images/winter.jpg"/>">
 => 이렇게 c:url 태그의 value로 넣어주는 것 만으로, 현재 컨텍스트의 경로를 갖다가 붙여서 새 문자열을 만든다.
 => context 속성을 지정해 줄 수도 있는데, context 속성을 지정해 주었을 경우에, context, value 는 "/"로 시작
      해야 한다.

* <c:redirect/> : request.sendRedirect()

<c:redirect url="jstlcore01.jsp">
 <c:param name="number" value="300"/>
</c:redirect>
 => url에 해당하는 페이지로 리다이렉션 하면서 파라미터를 가지고 간다. body 없이 사용 가능하다.
 => c:url 과 마찬가지로 context 속성을 지정하면, value와 context는 "/"로 시작해야 한다.

* <c:param/>

<c:import url="http://bruce.com">
   <c:param name="action" value="register"/>
</c:import>

 => 위 태그는 다음과 같은 쓸 수 있다.

<c:import url=http://bruce.com?action=register>

* EL연산자간의 우선순위

1. []
2. ()
3. - (단항)  not  !  empty
4. *  /  div  %  mod
5. +  - (이항)
6. <  >  <=  =>  lt  gt  le  ge
7. ==  !=  eq  ne
8. &&  and
9. ||  or

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments