본문 바로가기
programming/임시

jstl

by hotdogya 2012. 11. 25.

코어태그의 구분

 ① 범위 변수를 생성하고 초기화하는 기능을 지원하는 태그

 ② 흐름을 제어할 수 있는 태그

 ③ URL 처리를 위한 태그

 ④ 예외 처리 태그

 ⑤ 출력태그


태그 라이브러리(taglib) 지시자

기  능

태 그

설        명

 표현 언어 지원

 set

 -. 변수에 값을 설정한다.

 remove

 -. 변수에 설정된 값을 제거한다.

 out

 -. 표현식인 <%= %>를 대체할 수 있다.

 -. JspWriter에 데이터를 출력할 때사용하는 태그이다.

 catch  -. 예외처리에 사용한다.

 흐름 제어

 if

 -. 조건에 따라 처리를 달리 할 때 사용한다.

 choose  -. 여러 조건에 따라 처리를 달리 할 때 사용한다.
 forEach  -. 반복 처리를 위해서 사용한다.
 forTokens

 -. 구분자로 분리된 각각의 토큰을 처리할 때 사용한다.

 URL 관리

 Import

 -. 외부의 자원을 url을 지정하여 가져다 사용한다.

 redirect  -. 지정한 경로로 이동한다.
 url

 -. url을 재 작성한다.



JSTL core 중 표현 언어를 지원하는 태그

 ① <c:set/>

   -. <c:set/> 태그는 JSP의 setAttribute()와 같은 역할을 한다.

   -. 해당 범위의 변수를 생성하고 속성값을 정하는데 사용된다.

   -. [ ]으로 둘러싸인 부분은 생략 가능한 부분이다.

   -. value 값은 일반 문자열이나 표현 언어가 들어간다.

   -. 지정된 변수가 이미 존재한다면 지정한 값이 할당된다.

   -. 존재하지 않는담녀 범위 변수가 새롭게 만들어지고 그 값으로 초기화 된다.

형식

 <c:set var = "varName" value = "value" [scope = "{page|request|session|application}"]/>


속성

설       명

 var

 -. 범위 변수 이름을 지정한다.

 value  -. 변수의 값을 지정한다.
 scope

 -. 변수가 머물게 될 범위를 나타낸다.

 -. scope 속성이 생략될 경우 기본값은 page이다.



변수 msg에 'Hello'를 값으로 지정하는 예제이다.

  <c:set var = "msg" value = "${'Hello'}"/>


value 속성을 지정하지 않고 다음과 같이 태그의 몸체의 값을 지정할 수 있다.

형식

 <c:set var = "varName" [scope = "{page|request|session|application}"]>

       body content

 </c:set>


변수 age에 30을 값으로 지정하는 예제이다.

  <c:set var = "age" scope = "page">

       ${30}

 </c:set>


자바 빈과 같은 객체의 속성에 값을 할당하기 위해서는 target과 property 속성을 이용한다.

형식

 <c:set target = "target" property = "property = "propertyName" value = "value"/>


target 속성에는 자바 빈 객체를 지정하고, property에 적용할 객체의 속성을 지정하고 value 속성은 값을 지정한다.

우선 glory.User 클래스로 객체를 생성하여 이름을 user로 지정한다.


우선 glory.User 클래스로 객체를 생성하여 이름을 user로 지정한다.

  <c:set var = "user" value = "<%= new glory.User() %>" />


user 객체의 lastName 속성 값으로 '성'을 대입한다.

  <c:set target = "${user}" property = "lastName" value = "${'성'}" />


자바 빈의 객체 속성 값 역시 value 속성을 지정하지 않고 다음과 같이 태그의 몸체의 값을 지정할 수 있다.

형식

 <c:set target = "target" property = "propertyName">
       body content

 </c:set>


user  객체의 firstName 속성 값으로 '윤정'을 대입한다.

<c:set target = "${user}" property = "firstName">
      ${' 윤정'}

 <c:set>



 ② <c:out/>

  -. <c:out/>은 가장 많이 쓰게 되는 태그로 JSP의 표현식 <%= %>을 대체한다.

  -. JspWriter에 데이터를 출력할 때 사용하는 태그이다.

 -. [ ]으로 둘러싸인 부분은 생략 가능한 부분이다.

 -. value와 default 값은 일반 무자열이나 표현언어가 들어간다.

형식

 <c:out value = "value" [escapeXml = "{true|false}"] [default = "기본값] />


속성

설명

 value

 -. JspWriter에 출력할 값을 지정한다.

 excapeXml

 -. true로 지정하면< > & ' "문자들이 각각 &lt; &gt; &amp; &#039; &#034; 로 출력한다.

 -. 생략도리 경우 true가 기본값이다.

 default
 -. 지정한 값이 없을 경우 사요할 값을 지정한다.


변수 age에 저장한 값을 출력하되 지정한 값이 없을 경우에는 10을 출력한다.

  <c:out value = "${age}" default = "${10}" />


default 속성을 지정하지 않고 다음과 같이 태그의 몸체의 값을 지정할 수 있다.

<c:out value = "value" [escapeXml = "{true|false}"] />

        기본값

 </c:out>


변수 age에 저장된 값을 출력하는 out 태그를 default 속성을 지정하지 않고 태그의 몸체에 default 속성 값을 기술한다.

  <c:out value = "${age}">

      ${10}

  </c:out>


 ③ <c:remove/>

  -. <c:remove/>는 JSP의 removeAttribute()와 같은 역할을 한다.

  -. 해당 scope에 있는 변수를 제거하는 역할을 한다.

형식

 <c:remove var = "varName" [scope = "{page|request|session|application}"] />

 -. var 속성과 scope 속성은 set 태그의 두 속성과 동일한 의미를 갖는다.

    주의할 점은 remove태그의 scope는 set 태그에서 변수를 설정할 때 지정한 scope와 동일하게 지정해야 한다.

 -. var속성만 같고 scope 속성이 다르면 다른 변수로 인식해서 제거되지 않는다.


변수 age를 제거한다.

 <c:remove var = "age" scope = "page" />



■ JSTL core 중 흐름을 제어하는 태그

 -. JSTL에서 가장 많이 사용되는 태그들 중의 하나가 흐름을 제어하는 태그이다.

 -. JSP 코드에서 제어문인 if나 forㄹ르 사용할 경우 <% %>, { } 등이 복잡하게 얽혀있기 때문에 가독성을 저하시킨다.

    이런 불편함을 없애기 위해서 나온 태그가 흐름을 제어하는 태그인 if, choose, forEach, forTokens이다.


① <c:if>

 -. <c:if/> 태그는 자바의 if 문과 비슷한 기능을 제공한다.

 -. 자바는 if ~ else를 사용하여 여러가지 중에 하나를 선택적으로 수행할 수 있는 기능을 제공하는 반면 <c:if/> 태그는 if만이 제공된다. 

형식

 <c:if test = "testCondition" var = "varName" [scope = "{page|request|session|application}"]/>


 -. <c:if/> 태그의 test 속성 값으로 조건 판별식을 기술한다. 그 조건의 결과인 true 혹은 false가 변수 varName에 저장되고, 나중에 활용이 가능하다.

 -. 변수의 scope는 임의로 지정할 수 있고, 생략도리 경우 기본값은 page이다.

 -. 다음은 Body가 있는 경우이다.

형식

 <c:if test = "testCondition" [var = "carName"] [scope = "{page|request|session|application}"]/>

       body content

 </c:if>


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

 -. <c:choose/> 태그는 java의 switch문과 같지만, 조건에 문자열 비교도 가능하고 쓰임의 범위가 넓다.

 -. <c:if> 태그에 else가 없기 때문에 java의 if ~ else 문의 대체 기능도 수행한다.

형식

 <c:choose>
       <c:when test = "조건1"> body content </c:when>      <%-- 조건1에 만족할 때 --%>

       <c:when test = "조건2"> body content </c:when>      <%-- 조건2에 만족할 때 --%>

       <c:otherwise> body content </c:otherwise>             <%-- 조건에 만족하지 않을 때 --%>

 </c:choose>



  jstlEx12.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<c:set var = "fruit" value = "${param.fruit}"/>

파라메터 fruit에 실려 온 값 :
<c:if test = "${!empty fruit}">
    <c:out value = "${fruit}"/>
</c:if>
<p/>
<c:choose>
    <c:when test = "${fruit=='apple'}">
        <c:out value = "${fruit}"/> : 사과
    </c:when>
    <c:when test = "${fruit=='banana'}">
        <c:out value = "${fruit}"/> : 바나나
    </c:when> 
    <c:when test = "${fruit=='orange'}">
        <c:out value = "${fruit}"/> : 오렌지
    </c:when>  
    <c:otherwise>기타 등등 </c:otherwise>
</c:choose>


 출력화면① : http://localhost:8181/ch19/jstlEx12.jsp

 출력화면② : http://localhost:8181/ch19/jstlEx12.jsp?fruit:apple


③ <c:forEach>, <c:forTokens/>

 -. <c:forEach>는 배열이나 Collection 또는 Map에 저장되어 있는 값들ㅇ르 순차적으로 처리할 때 사용할 수 있는 태그이다.

 -. items 속성에 올 수 있는 것들로는 Map, 배열, Collection 이 있다.

 -. <c:forEach/>는 자바의 for문과 같이 지정한 횟수만큼 반복하는 용도로 쓸 수 있다.

<c:forEach [var = "varName"] begin = "begin" end = "end" [step = "step"]>

       body content

 </c:forEach>


 -. <c:forEach> 기능

 ① 원하는 구문만큼 반복할 수도 있다.

 ② 객체를 받아와서 그 객체의 길이만큼 반복할 수도 있다.

 ③ begin, end속성에 시작번호와 끝번호를 지정하고, step 속성을 잉요해서 증가 구간을 정하여 원하는 만큼 반복 수행할 수 있다.

 ④ var 속성에서 정한 변수는 반복되는 내부 구간에서 사용할 수 있다.


  jstlEx14.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.util.*" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<%-- 컬렉션 객체 중에서 해쉬 테이블을 사용하여 키와 값을 지정한다. --%>
<%
    Hashtable htable = new Hashtable();
   
    // 해쉬 테이블에 키 / 데이터를 입력
    htable.put("사과", "Apple");
    htable.put("딸기", "Strawberry");
    htable.put("포도", "Grapes");
%>

<%-- 해쉬 테이블 객체를 선언한다. --%>
<c:set var = "ht" value = "<%= htable %>"/>

<%-- <c:forEach/> 반복문을 보면 items 속성에 해쉬 테이블 객체 ht를 받아온다. --%>
<c:forEach var = "element" items = "${ht}">

    <%-- ht객체는 Map 형태이므로 getKey()와 getValue()메소드를 사용하여 --%>
    <%-- 키와 값을 얻어오기 때문에 h.key와 h.value를 통해서 출력할 수 있다. --%>
    ${element.key} : ${element.value}<br/>
</c:forEach>
<p/>

<%-- 점수를 저장한 배열을 선언한다. --%>
<c:set var = "score" value = "<%= new int[] { 90, 100, 80, 85, 95, 75} %>" />

*** 점 수 ***<br/>
<%-- <c:forEach/> 태그를 사용하여 배열에 저장된 데이터 값을 출력하면서 총합을 구한다. --%>
<c:forEach var = "s" items = "${score}" begin = "0" end = "5">
    ${s} &nbsp;&nbsp;&nbsp;
    <c:set var = "tot" value = "${tot + s}"/>
</c:forEach>
<p/>

<%-- 구한 총합을 추력한다. --%>
점수의 총합 : <c:out value = "${tot}"/><p/>

*** 홀 수 ***<br/>
<%-- 1에서 10까지 2씩 증가하면서 반복하여 값을 출력하면 홀수가 출력된다. --%>
<c:forEach var = "i" begin = "1" end = "10" step = "2">
    ${i} &nbsp;&nbsp;&nbsp;
</c:forEach>

 출력화면



-. <c:forTokens/>는 java.util.StringTokenizer를 이용한 것이다.

형식

 <c:forTokens items = "stringOfTokens" delims = "delimiters"

    [var = "varName"] [varStatus = "varStatusName"] [begin = "begin"] [end = "end"] [step = "step"]>

       body content

 </c:forEach>


-. 문자열로 구분하여 하나씩 출력할 수 있다.

jstlEx14.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<c:forTokens var = "one"
             items = "서울|인천, 대전, 대구, 부산, 광주, 평양"
             delims = ", " varStatus = "sts">
    <c:out value = "${sts.count}:${one}"/>&middot;
</c:forTokens>
<hr/>

<c:forTokens var = "one"
             items = "서울|인천, 대전, 대구, 부산, 광주, 평양"
             delims = ",| " varStatus = "sts">
    <c:out value = "${sts.count}:${one}"/>&#149;
</c:forTokens>

 출력화면




■ URL 관리 태그


1) <c:import/>

 -. <c:import/>는 <jsp:include> 태그처럼 사용된다.

형식

 <c:import url = "url" [context = "context"] [var = "varName"] [scope = "{page|request|session|application}"] [charEncoding = "charEncoding"]>

       <c:param> 서브 태그 위치

 </c:import>

 

 -. <c:import/>는 url 속성에 지정된 서버에 접속해서 데이터를 읽어 와서 var 속성에 지정한 변수에 저장한다.

 -. 읽어 온 데이터가 변수에 저장되기 때문에 쉽게 원하는 형태로 편집할 수 있다.

 -. 웹 어플리케이션 내부의 자원 접근은 물론이고, http, ftp 같은 외부에 있는 자원도 가져와서 페이지 내에 귀속시킬 수 있다.

 -. 해당 주소의 컨텐츠 Reader 객체로 읽어올 수도 있다.


형식

 <c:import url = "url" [context = "context"] varReader = "varReaderName" [charEncoding = "charEncoding"]>

       varReader 를 사용하는 액션

 </c:import>


 jstlEx15.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<%-- jspwork프로젝트의 helloWorld.jsp를 실행한다. --%>
<c:import url = "http://localhost:8181/jspwork/helloWorld.jsp" var = "data"/>
${data}

 helloWorld.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello World!
</body>
</html>

  출력화면



2) <c:url>

 -. <c:url> 태그는 주소(URL)를 자동으로 생성하여 변수에 저장한다.

형식

 <c:url value = "value" [context = "context"] [var = "varName"] [scope = "{page|request|session|application}"]/>


 -. Body 있는 경우에는 쿼리 스트링 파라메터를 지정할 수 있다.

형식

 <c:url value = "value" [context = "context"] [var = "varName"] [scope = "{page|request|session|application}"]>

       <c:param> 서브태그

 </c:url>



p>
jstlEx16.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<h3><c:url value = "images/pic.jpg" var = "test"/></h3>

<img src = "${test}' />" width = '100' height = '100'>

 출력화면




3) <c:redirect/>

 -. <c:redirect/>는 response.sendRedirect()를 대체하는 태그이다.

 -. 컨텍스트로 이동이 가능하다. <c:redirect/>의 형식은 다음과 같다.

형식

 <c:redirect url = "value" [context = "context"]/>


 -.Body 있는 경우에는 쿼리 스트링 파라메터를 지정할 수 있다.

형식

 <c:redirect url = "value" [context = "context"]/>
       <c:param> 서브태그
 </c:redirect>


 jstlEx17.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<c:redirect url = "/jstlEx16.jsp"/>
 출력화면
 



①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮


원문 :  http://ihayatesw.tistory.com/155


'programming > 임시' 카테고리의 다른 글

자바 클래스 확인 getClass()  (0) 2012.11.26
자바 프로퍼티 파일 값 읽어오기  (0) 2012.11.25
자바 POI라이브러리  (0) 2012.11.19
바이트와 문자  (0) 2012.07.19
mysql 프로시져 루프돌며 insert  (0) 2012.05.10