코어태그의 구분
① 범위 변수를 생성하고 초기화하는 기능을 지원하는 태그
② 흐름을 제어할 수 있는 태그
③ 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"> </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로 지정하면< > & ' "문자들이 각각 < > & ' " 로 출력한다. -. 생략도리 경우 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 = "조건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"%> |
출력화면① : 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} <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} </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}"/>· </c:forTokens> <hr/> <c:forTokens var = "one" items = "서울|인천, 대전, 대구, 부산, 광주, 평양" delims = ",| " varStatus = "sts"> <c:out value = "${sts.count}:${one}"/>• </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"%> |
출력화면 |
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> |
jstlEx16.jsp |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> |
출력화면 |
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"/> |
출력화면 |
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮
'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 |