본문 바로가기

Web Programming

JSTL : <c:out> <c:set> <c:remove> <c:catch> 태그

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
오랜만에 JSP 공부를 하는 것 같습니다. 그간 너무 게을리 지내서.. -_-;; 아무튼.. JSTL 이라는 놈에 대해서 한번 알아보도록 하겟씁니다. 그간 JSTL 을 배우기전에 표현언어라는 걸 배웠었고.. ${변수명} 이런식으로 사용했던거.. 획기적으로 JSP 소스코드를 줄여주는 역할을 했던 커스텀 태그도 있었구요.. 이러면서 나왔떤게 커스텀 태그를 일일이 다 만들어 줘야하는가.. 라는 그런 의문들이 생겨 났는데..

JSTL을 사용하면 됩니다. 다 만들 필요없이.. 만들어 놓은걸 쓰면 되는거죠... 그게 바로 JSTL 이라는 겁니다. JSTL은 그냥 쓴다고 되는게 아니라.. 여러가지 환경 설정이 필요합니다.

일단 http://jakarta.apache.org 에 가서 JSTL 라이브러리를 다운 받아서 설치를 하셔야 합니다.

머 설치 과정을 재끼고 한번 실습을 하도록 하겠습니다. 먼저 배워볼 JSTL 의 영역은 바로 코어 라이브러리 인데요.. 가장 기본적인 라이브러리다.. 라고 생각하시면 됩니다. 코어 한것 이외에도 XML도 있고 SQL도 있고 여러가지 라이브러리가 있다고 하는데 차후에 배우게 되겠지요..

아!! 까먹은게 있습니다. JSTL 을 사용할려면 미리 선언을 해줘야 합니다! 잊지 않으셨겠죠! taglib!

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


<c:out>

가장 처음 나오는 것이 <c:out> 태그 입니다. 왜 하필이면 c 이냐 할수있는데.. prefix 속성이 c라서 그런거죠 ㅎㅎ

얘는 이전에 JSP 표현식으로 사용했던 <%= %> 요걸 대체 하는 것이라고 합니다. 그치만 표현언어를 사용하면 더 쉽겠죠 뭐.. ㅎㅎ 따라서 out 태그야 뭐 그리 중요한게 아닙니다. 하지만 out 태그를 배우면서 알아 둬야겠지요.. 어떤식으로 JSTL 태그를 사용하는 것인가? 그리고 어떤 속성들이 있는지를 말이죠.. 한마디로 문법!!

소스를 한번 볼까요?

<body>
   <table>
       <c:forEach var="member" items="${members}" >
           <tr>
               <td>${member.name}</td>
               <td><c:out value="${member.email }" escapeXml="false"> email 없음</c:out></td>
           </tr>
       </c:forEach>
   </table>
</body>
forEach는 재껴두구요.. 아마도 향상된 for문.. forEach 문을 사용하는거 같습니다. 일단 재껴둡시다 ㅎㅎ 먼저 out 태그는 한번 보실수 있는데요.. 위처럼 ${member.name} 과 같이 표현식을 사용하니까 out 태그를 안써줘도 된다는 점을 확인할 수가 있죠.. 하지만 밑에 부분은 out 태그를 써봤습니다. 안쪽으로 표현식이 들어가게 되는군요.. ㅋ

escapeXml 이라는 태그는 < > & ' " 이런 문자들을 일반 문자로 변환할껀지 물어보는 속성이라고 하네요.. 그리고 out 태그는 닫는 태그도 있는데요 그 사이에 들어가게 될 값은 해당 email 변수에 아무것도 없을 경우에 기본값으로 출력될 내용이 됩니다!

사용자 삽입 이미지


<c:set>

얘는 변수 값을 설정하거나 객체 멤버 변수 값을 설정할때 사용합니다. 일단 예제를 보실까요??

<body>
   <c:set value="Hello World" var="msg"/>
   msg : ${msg}<br>
   msg : <%= pageContext.getAttribute("msg") %>
</body>
얘를 살펴보면.. msg 라는 변수에 "Hello World" 를 넣었다는걸 눈대중으로 알수가 있습니다. 그리고 아래 두줄은 표현식을 사용한 것과 그냥 JSP 형식으로 쓴것이 얼마나 코드를 줄여주는지를 보여주고 있습니다.

그럼 객체의 멤버 변수 값을 설정할때는 어떻게 사용하는가...? 하는 건데요..

<c:set value="변수의 값" target="객체이름" property="객체의 멤버 변수명"> 이런식으로 사용합니다. 예를들어서 member 라는 객체에 있는 name 이라는 변수를 "남한산" 이라고 해주고 싶다면..

<c:set value="남한산" target="member" property="name"> 이라고 해주면 되겠지요..
사용자 삽입 이미지

<c:remove>


얘는 해당 범위내에 있는 변수를 제거 한다고 합니다. 범위라는 것은 예전에 jsp:useBean 태그 사용할 때도 한번 나왔던건데요.. session 이냐 page냐.. 하는 등의 범위인데요. 말이 나와서 얘긴데 scope 의 크기는 어떻게 측정을 할 수 있을까요? 아래와 같습니다.

page < request < session < application
이런 관계를 가지게 된다는 점을 유의하시구요.. 얘는 어떻게 사용할까요???

<body>
   <c:set value="Hello World" var="msg"/>
   before remove : <c:out value="${msg}"/><br>
   <c:remove var="msg"/>
   after remove : <c:out value="${msg}"/><br>
</body>
자.. 아주 간단하죠.. 여기선 scope를 주진 않았지만.. 어쨌든 지워지는걸 볼수가 있습니다.

사용자 삽입 이미지

<c:catch>

마지막으로 catch 태그 입니다. 이름만 봐도 알수 있듯이 예외처리를 하는 녀석입니다.

<body>
   <c:catch var="errMsg">
       <%=9/0 %>
   </c:catch>
   error message : ${errMsg}
</body>
이렇게 되면 발생하는 예외들을 잡아서 살짝 보여주겠죠 ㅋ

가장 기본적인 태그들을 살펴 보았으니.. 좀더 세밀한 코어 라이브러리를 뒤져보도록 하겠습니다~