본문 바로가기
WEB/JSP Servlet

JSTL : 코어 태그

by 노랑파랑 2016. 10. 28.
반응형




코어 태그

* 변수 설정이나 if-else와 같은 논리 처리에 사용되는 스크립트 코드를 대체하는 태그를 제공한다.

* 사용방법 ( taglib 디렉티브 추가 )

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




1. 종류

기능 분류 

태그 

설명 

 변수 지원

 set 

 JSP에서 사용할 변수를 지정 

 remove 

 설정한 변수 제거 

 흐름 제어

 it 

 조건에 따라 내부 코드를 수행 

 choose

 다중 조건을 처리할 때 사용 

 forEach 

 컬렉션이나 Map의 각 항목을 처리할 때 사용 

 forTokens 

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

  URL 처리

 import 

 URL을 사용하여 다른 자원의 결과를 삽입 

 redirect 

 지정한 경로로 리다이렉트  

 url 

 URL 재작성 

 기타 태그 

 catch 

 익셉션을 처리할 때 사용 

 out 

 JspWriter에 내용을 출력 





2. 변수 지원 태그

* JSTL이 지원하는 태그에서 변수를 설정하기 위해 사용


1] <c:set>

* EL 변수의 값이나 EL 변수의 프로퍼티 값을 지정할 때 사용한다.

1) [ 사용법 1 ]EL 변수 생성

<c:set var="변수명" value="변수값" [scope="영역"] />

<c:set var="변수명" [scope="영역"]>변수값</c:set>

var : 값을 저장할 EL 변수의 이름을 지정

value : 변수의 값을 저장한다. 표현식, EL, 정적인 텍스트를 사용해 지정할 수 있다.

scope : 변수를 저장할 영역을 지정한다. 값은 page(기본값) , request, session, application 중 하나. 

* scope에 지정한 영역에 변수를 저장한다. 

* 예 ) scope 영역이 page이고 var속성과 value속성이 각각 varName, varValue 일 때, 

내부적으로 pageContext.setAttribute(varName, varValue, scope)를 호출해서 지정한 영역의 속성으로 설정한다.

<%-- value 속성 사용 예 --%> <c:set var="name" value="홍길동" /> <c:set var"name" value="<%= m.getFirstName() %>" scope="request" /> <c:set var="name" value="${m.lastName} ${m.firstName}" /> <%-- 태그의 몸체를 값으로 사용하는 예 --> <c:set var="name">홍길동</c:set> <c:set var="name"><%= m.getLastName() %><%= m.getFirstName() %> </c:set> <c:set var="name"> ${m.lastName} ${m.firstName} </c:set>


2) [ 사용법 2 ] 객체의 프로퍼티 값 설정

<c:set target="대상" property="프로퍼티이름" value="값"/>

<c:set target="대상" property="프로퍼티이름">값</c:set>

target : 프로퍼티 값을 설정할 개상 객체를 지정한다. 표현식 ( <%= 변수 %> )이나 EL, 변수( ${varName} )를 사용할 수 있다.

property : 설정할 프로퍼티 이름을 지정한다. target이 자바빈 객체인 경우 프로퍼티 이름에 해당하는 set 메소드를 제공해야 한다. 

예를들어, 프로퍼티 이름이 name인 경우 target 객체는 setName() 메소드를 제공해야 한다. 

Map인 경우 Map.put.(프로퍼티 이름, 값)을 이용해 설정한다.

value : 프로퍼티 값을 지정한다.

3) 사용 예

<% Member member = new Member(); %> <%-- member.setName("홍길동")과 동일 --> <c:set target=<%= member %>" property="name" value="홍길동" /> <%= member.getName() %> // 값 홍길동 출력 <c:set var="m" value="<%= member %>" /> <%-- member.setName("홍길동1")와 동일 --> <c:set target="${m}" property="name" value="홍길동1" /> ${m.name} //값 홍길동1 출력 <% Map<String, String> prop = new HashMap<String, String>(); %> <%-- prop.set("host", "localhost")와 동일 --> <c:set target="<%= prop %>" property="host" value="localhost" /> <%= prop.get("host") %> //값 localhost 출력


4) 태그의 속성 설명 요약

속성 

표현식/EL 

타입 

설명 

var 

사용 불가 

String 

EL 변수 이름 

value 

사용 가능 

Object 

변수에 할당한 값 

scope 

사용 불가 

String 

변수에 생성할 영역, 기본값:page 

target 

사용 가능 

Object 

프로퍼티 값을 설정할 객체 지정 

property 

사용 가능 

String 

프로퍼티 이름 



2] <c:remove>    

* set 태그로 지정한 변수를 삭제할 때 사용한다. 



1) 기본 구문

<c:remove var="varName" [scope="영역"] />

* var / scope : set태그의 두 속성과 동일한 의미를 갖는다. 

* 삭제할 변수의 scope를 지정하지 않으면 동일한 이름의 모든 영역의 변수를 삭제한다.


2) 태그의 속성 설명 요약

속성 

표현식 / EL 

 타입 

설명 

var 

사용 불가 

String 

삭제할 EL 변수 이름 

scope 

사용 불가 

String 

삭제할 변수가 포함된 영역 





3. 흐름 제어 태그

*  JSTL에서 많이 사용하는 태그 중 하나로, 다양한 블록 ( '<%...%>' , '{ }' )이 복잡하게 얽히는데 개발자가 코드를 이해하는데 방해가 되는 것을 없애기 위해 제공되는 태그이다.

* 제공하는 태그

1) if

2) choose

3) forEach

4) forToken




1] <c:if>

* 자바의  if 블록과 비슷한 기능을 제공한다.

* 중첩된 if-esle 블록 같은 효과는 낼 수 없다.


1) 기본 사용법

<c:if test="조건">

....

</c:if> 


2) 사용 예

// 항상 true, 태그 내 내용을 처리한다.

<c:if test="true"> ... </c:if>


// 항상 false, 태그 내 내용을 처리하지 않는다.

<c:if test="false">...</c:if>


// EL의 결과값이 true인 경우 태그 내 내용 처리

<c:if test="${exam}"> ... </c:if>


// 표현식의 결과값이 true인 경우 태그 내 내용 처리

<c:if test="<%= exam %>"> ... </c:if>


// 계산 결과를 EL 변수에 저장

<c:if test="<%= someCondition %>" var="testREsult"> ... </c:if>

테스트 결과는 ${testResult}입니다.

* 조건은 표현식이나 EL 또는 정적 문자열의 값을 가질 수 있고, true나 false에 해당하는 값이 온다, 이 값이 true이면 <c:if> 태그 안의 내용을 처리한다.

* test 속성의 계산 결과를 var 속성으로 지정한 EL 변수에 저장할 수 있다.


3) 태그 속성 요약

속성 

표현식 / EL

타입 

설명 

test 

사용 가능 

boolean 

검사 조건 

var 

사용 불가 

String 

검사 조건의 계산 결과값을 저장할 EL 변수 

scope 

사용 불가 

String 

삭제할 변수가 포함된 영역 




2] <c:choose> | <c:when> | <c:otherwise>

* <c:choose> 태그는 자바의 switch문과 if-else 블록을 혼합한 형태도 다수의 조건문을 하나의 블록에서 수핼할 때 사용한다.


1) 기본 사용법

<c:choose>    

<c:when test=" ${ member.level == 'trial' } " >    // = switch의 case :

...

</c:when>

<c:when test=" ${ member.level == 'regular' } ">    // =s witch의 case : 

...

</c:when>

<c:otherwise>    // = else 구문

...

</c:otherwise>

</c:choose>

* 만약 모든 <c:when> 태그의 조건이 충족되지 않으면 <c:otherwise> 태그가 실행된다. <c:when> 태그의 조건이 충족되어 실행된다면 <c:otherwise> 태그는 실행되지 않는다.




3] <c:forEach>

* 배열, Collection, Map에 저장되어 있는 값들을 순차적으로 처리 할 때 사용한다.

* 자바의 for, do-while으 대신해서 사용할 수 있다.


1) 기본 사용법

<c:forEach var="변수" items="아이템">

...

<tr>

  <td align="center" background-color="#ffffff">

${변수사용}

   </td>

</tr>

...

</c:forEach>

* items : 배열, Map, Collection이 올수 있다. 배열의 경우 객체의 배열과 기본 데이터 타입의 배열에 대해서도 알맞게 처리하며, 기본 데이터 타입은 Integer나 Double과 같은 래퍼 클래스를 사용해서 처리하게 된다.


2) for 구문과 비슷한 동작을 하도록 구현하는 방법

<c:forEach var=" i " begin= " 1 " end=" 10 ">    // for( int i = 1 ; i <= 10 ; i ++) 

${ i } 사용

</c:forEach>


// 증가분 변경

<c:forEach var = " i " begin = " 1 " end = " 10 " step = " 2 "> 

${ i }    // i는 1,3,5,7,9의 값을 차례로 가지게 된다.

</c:forEach> 

* begin 속성과 end 속성을 이용해 범위를 지정한다.

* step 속성을 이용해 증가분을 변경할 수 있다. 


3) items 속성과 함께 begin, end 속성을 사용하면 참조할 변수의 개수를 제한할 수 있다.

<c:forEach var= " i " items=" ${ intArray } " begin= "2" end = "4">    // 정수형 배열에서 인덱스 2번부터 4번까지만 값 참조

[ ${ i } ]

</c:forEach>

*  배열뿐 아니라 List, Interator, Enumeration, Map에 대해서도 begin, end 속성을 사용해 읽어올 항목의 개수를 제한할 수 있다. 

* 단, List, Interator, Enumerationd의 경우 삽입한 순서와 출력하는 순서가 다를 수 있기 때문에, 이들 타입에 대해서는 begin, end 속성을 사용하지 않는 것이 바람직하다.


4) items 속성값으로 Map  객체를 전달할 경우 

* <key, value>쌍의 정보를 담고 있는 java.util.Map.Entry타입의 객체를 변수에 할당하며, 

key 프로퍼티와 value 프로퍼티를 사용하여 저장된 값에 접근할 수 있다.


5) items 속성값으로 List와 같은 Collection이나 배열을 전달한 경우

* <c:forEach> 태그의 안에서 현재 사용하는 항목의 인덱스 값을 사용해야 할 때가 있다.

 이 경우 varStatus 속성을 이용해서 인덱스 값을 사용할 수 있다.

<c:forEach var="item" items="<%= someItemList %>" varStatus="status">

${ status.index + 1 } 번째 항목 : ${ item.name }

</c:forEach}

* varStatus 속성은 루프 정보를 담는 객체를 저장할 수 있는 변수명을 값으로 같는다. 이 때 <c:forEach> 태그 내에서는 varStatus 속성에 명시한 변수를 이용해서 현재 처리 중인 인덱스, begin 속성값, end 속성값 등을 구할 수 있다.

* varStatus 속성에 명시한 변수가 제공하는 프로퍼티는 다음과 같다. 

프로퍼티 

설명

index 

루프 실행에서 현재 인덱스 

count 

루프 실행 횟수 

begin 

begin 속성값 

end 

end 속성값 

 stpe

stpe 속성값 

first 

현재 실행이 첫 번째 실행인 경우 true 

last

현재 실행이 루프의 마지막 실행인 경우 true 

current 

컬렉션 중 현재 루프에서 사용할 객체 



 6) 태그의 속성 요약

속성 

표현식 / EL 

타입 

설명 

var 

사용 불가 

String 

태그 내에서 사룔할 EL 변수 이름 

items 

사용 가능 

Collection

Iterator

Enumeration

Map, 배열 

반복 처리할 데이터 

varStatus

사용 불가 

String 

루프 상태를 저장할 EL 변수 이름 

begin 

사용 가능 

int 

시작 인덱스 값 

end 

사용 가능 

int 

끝 인덱스 값 

step 

사용 가능 

int 

인덱스 증분 값 







4] <c:forTokens>

* java.util.StringTokenizer 클래스와 같은 기능을 제공하는 태그

* <c:forEach> 태그와 동일하게 begin, end, step, varStatus 속성을 제공한다.


1) 기본 사용법

<c:forTokens var="token" items="문자열" delims="구분자">

  ${ token } 사용

</c:forTokens>

* itmes 속성으로 전달받은 문자열을 구분자를 이용해 나누고, 구분한 각 문자열을 var 속성에 지정한 변수에 저장한다.


2) 사용 예

<c:forTokens var="color" items="red, green, blue" delims=",">

${color}

<c:forTokens>

* 위 예는 items 속성값을 콤마(,)로 나눈 "red", "green", "blue" 문자열을 color 변수에 순서대로 대입한다.






URL 처리 태그

* URL을 생성하고 리다아렉트 처리 기능을 제공한다.




1] <c:url>

* URL을 생성해주는 기능을 제공한다.


1) 기본 사용법

<c:url value="URL" [var="varNamr"] [Scope="영역"]

<c:param name="이름" value="값">

</c:url>

var : 생략가능. 지정하지 않으면 현재 위치에 생성한 URL을 출력한다. 지정하면 해당 변수에 생성한 URL을 지정한다.

scope : 생략가능

value : 절대 URL / 상대 URL 두 가지 방식으로 입력

- 절대 URL : http://bravesuccess.tistory.com/

- 상대 URL  (웹 어플리케이션) : 슬래시로 시작. 예) /var/www/html/index.jsp

-상대 URL (현재 JSP에 대한 상대 경로) : 슬래시로 시작 안함. 예) ../var/www/html/index.jsp

* <c:param> 태그를 이용해 파라미터를 URL에 추가할 수 있다.



2) 사용 예

<%     <c:url value="http://search.daum.net/search" var="searchUrl">

<c:param name="me" value="hong">

<c:param name="you" value="dong">

</c:url>

%>

${searchUrl}

* 결과는 http://search.daum.net/search?me=hong&you=dong



3) 태그 속성 요약

속성 

표현식 / EL 

타입 

설명 

value 

사용 가능 

String 

읽어올 URL 

var 

사용 불가 

String 

읽어온 결과를 저장할 변수 이름 

scope 

사용 불가 

String 

변수를 저장할 영역 








2] <c:redirect>

* response.sendRedirect()처럼 지정한 페이지로 리다이렉트 시켜주는 기능을 제공한다.



1) 기본 사용법

<c:redirect url="URL" [context="컨텍스트 경로"]>

<c:param name="이름" value="값">

</c:redirect>

url : 값이 슬래시로 시작할 경우 리다이렉트 URL에 컨텍스트 경로가 추가된다.



2) 사용 예

<c:redirect url="/first.jsp" context="/jsp" />

* 위는 경로가 /jsp/first.jsp 가 된다. 



3) param 태그로 파라미터 설정 예 (실행되지 않는 코드이다)

<c:redirect url="http://search.daum.net/search">

<c:param name="me" value="hong">

<c:param name="you" value="dong">

</c:redirect>



4) 태그 속성 요약

속성 

표현식 / EL 

차입 

설명 

url 

사용 가능 

String 

리다이렉트 할 URL 

context 

사용 가능 

String 

컨텍스트 경로 







4. 기타 코어 태그


1] <c:out>

* JspWriter에 데이터를 출력할 때 사용되는 태그



1) 기본 사용

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

<c:out value="value" [escapeXml=" (true | false )"] >기본값</c:out>

value : JspWriter에 출력할 값을 나타낸다. 일반적으로 String과 같은 문자열을 속성값으로 갖는다.

 value가 java.io.Reader의 한 종류라면 out 태그는 Reader로부터 데이터를 읽어와 JspWriter에 값을 출력한다.

escapeXml : 이 속성값이 ture이면 아래 표와 같은 문자를 변경한다. 생략 가능. 기본값은 true

default : value 속성에서 지정한 값이 존재하지 않을 때 사용될 값을 지정한다.



2) escapeXml 속성값이 true일 때 변환되는 문자

문자 

변환된 형태 

&lt; 

&gt; 

&amp; 

&#039; 

&#034; 





    3) 태그 속성 요약

속성 

표현식 / EL 

타입 

설명 

value 

사용 가능 

Object 

출력할 값 

escapeXml 

사용 가능 

boolean 

특수 문자를 변환할 지의 여부 

default 

사용 가능 

Object 

value의 결과값이 null인 경우 출력할 값 







2] <c:catch>

* 발생된 익셉션을 EL 변수에 저장할 때 사용되는 태그


1) 기본 사용

<c:catch var="exName">

...

익셉션이 발생할 수 있는 코드

...

</c:catch>

...

${exName} 사용    

* 태그 내에서 익셉션이 발생 할 경우 그 익셉션 객체를 exName이란 변수에 할당한다. 때문에 태그 블록 밖에서는 이 exName 변수를 사용해

익셉션에 따른 처리를 한다. 


반응형

'WEB > JSP Servlet' 카테고리의 다른 글

JSTL : 함수  (0) 2016.10.30
JSTL : 국제화 태그  (0) 2016.10.30
표준 태그 라이브러리  (0) 2016.10.28
<jsp:forward>  (0) 2016.10.28
페이지 모듈화 : include 디렉티브  (0) 2016.10.28