특별한 일상

[jsp/servlet] JSTL 사용법 : 코어 태그 <c: 본문

IT•개발 끄적/Jsp&Servlet

[jsp/servlet] JSTL 사용법 : 코어 태그 <c:

소다맛사탕 2021. 4. 21. 11:39
반응형

지난 시간에 이어 JSTL(표준 태그 라이브러리)의 코어 태그 라이브러리에 대한 사용법을 알아 보겠습니다.

코어 태그 라이브러리를 사용하려면 앞서서 상단 선언에 이와 같이 선언한다.

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

※ 코어 태그 라이브러리

기능분류 태그 설명
변수 지원 set jsp에서 사용될 변수를 설정.
remove 설정한 변수를 제거.
흐름 제어 if 조건에 따라 내부 코드를 수행.
choose 다중 조건을 처리할 때 사용.
forEach 콜렉션이나 Map의 각 항목을 처리할 때 사용.
forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용.
URL 처리 import URL을 사용하여 다른 자원의 결과를 삽입.
redirect 지정한 경로로 리다이렉트 함.
url URL을 재작성 함.
기타 태그 catch 익셉션 처리에 사용.
out JspWriter에 내용을 알맞게 처리한 후 출력

 

 

1. 변수 지원 태그

1-1. <c:set> 태그

/* EL 변수 생성 */
<c:set var="변수명" value="값" [scope="영역"] />
<c:set var="변수명" [scope="영역"]>값</c:set>
---ex>
<c:set var="phone" value="01012341234" />
<c:set var="phone" value="<%= map.getMiddleNum() %>" scope="request" />
<c:set var="phone" value="010 ${map.middleNum} ${map.lastNum}" />

/* 객체의 프로퍼티 값 설정 */
<c:set target="대상" property="프로퍼티이름" value="값" />
<c:set target="대상" property="프로퍼티이름">값</c:set>
---ex>
<% Phone phone = new Phone(); %>
<c:set target="<%= phone %>" property="phone" value="01012341234" />
<%= phone.getPhone %> <%-- 값 : 01012341234 출력 --%>

<c:set var="p" value="<%= phone %>" />
<c:set target="${p}" property="phone" value="01012341234" />
${p.phone} <%-- 값 : 01012341234 출력 --%>

<% Map<String, String> map = new HashMap<String, String>(); %>
<c:set target="<%= map %>" property="phone" value="01012341234" />
<%= map.get("phone") %> <%-- 값 : 01012341234 출력 --%>

/* ${expr} 형식의 Deferred Expression을 값으로 설정 */
<c:set var="이름" value="#{expr}" />
---ex>
<% Map<String, String> map = new HashMap<String, String>(); %>
<c:set var="map" value="<%= map %>" />
<c:set var="phone" value="#{map.num}" />
<c:set target="${map}" property="num" value="01012341234" />
${phone} <%-- 값 : 01012341234 출력 --%>

 

1-2. <c:remove> 태그

<c:remove var="변수명" [scope="영역"] />
---ex>
<c:set var="phone" value="01012341234" scope="request" />
<c:set var="phone" value="01012341234" scope="session" />
<c:remove var="phone" /> <%-- 이름이 같은 선언한 두 변수 삭제 --%> 

2. 흐름 제어 태그

2-1. <c:if> 태그

/* true, false를 리턴하는 조건문 */
<c:if test="조건">
        .
        .
        .
</c:if>
<%-- 조건 : true, false, "텍스트", "${expr}", "<%= expr %>" --%>

 

2-2. <c:choose> 태그( <c:when> <c:otherwise> )

/* java의 if-else 블록 및 switch 문 혼합 */
<c:choose>
    <c:when test="조건1">
       ...
    </c:when>
    <c:when test="조건2">
       ...
    </c:when>
    <c:otherwise>
       ...
    </c:otherwise>
</c:choose>
<%-- 조건1 true면 조건1의 내부 블록 수행,
     조건1 false, 조건2 true면 조건2 내부 블록 수행,
     조건1 false, 조건2 false면 otherwise 내부 블록 수행 --%>

 

2-3. <c:forEach> 태그

/* 컬렉션 또는 Map에 저장된 값 순차적 처리 */
/* java for, do-while 대신 사용 */
<c:forEach var="변수" items="아이템">
   ...
  <tr>
     <td><input type="text">${변수사용}</input></td>
  </tr>
</c:forEach>
<%-- items 속성엔 Array 배열, 컬렉션, Map이 온다. --%>

/* for문 범위 지정 */
<c:forEach var="i" begin="1" end="10">
   ${i}
</c:forEach>
<%-- 값 1 2 3 4 5 6 7 8 9 10 --%>

/* step 속성 */
<c:forEach var="i" begin="1" end="10" step="2">
   ${i}
</c:forEach>
<%-- 값 1 3 5 7 9 --%>

/* 참조할 변수 갯수 제한 */
<c:forEach var="list" items="${resultMap}" begin="2" end="5">
   [${list}]
</c:forEach>

/* 항목의 인덱스 값을 사용해야 할 경우 varStatus */
<c:forEach var="list" items="${resultMap}" varStatus="status">
   ${status.index + 1}번째 번호 : ${list.phone}
   루프 실행 횟수 : ${status.count}
</c:forEach>

<%-- map의 경우 key, value를 전부 선언가능 
     ${list.key} : ${list.value} --%>

 

2-4. <c:forTokens> 태그

/* java util.StringTokenizer 클래스와 같은 기능 */
<c:forTokens var="변수" items="문자열" delims="구분자">
   ${변수}
</c:forTokens>
---ex>
<c:forTokens var="color" items="red,orange,yellow" delims=",">
   ${color}
</c:forTokens>
<%-- 출력:  red orange yellow --%>

3. URL 처리 태그

3-1. <c:import> 태그

<c:import url="URL" [var="변수명"] [scope="영역"] [charEncoding="캐릭터셋"]>
   ...
</c:import>
/* 캐릭터셋 */
<%-- URL 인코딩일 경우 --%>
<%@ page contentType="text/html; charset=utf-8" %>
<%-- 동일 어플리케이션 자원을 읽어오는 경우 --%>
<% request.setCharacterEncoding("euc-kr"); %>
---ex>
<%-- 절대 URL 경로 --%>
<c:import url="https://develop-sense.tistory.com/rss" var="rss" />
   ...
   ${rss}
<%-- 상대 URL 경로 --%>
<c:import url="https://develop-sense.tistory.com/" />
<%-- GET 방식 파라미터 --%>
<c:import url="https://search.naver.com/search.naver">
    <c:param name="where" value="nexearch" />
    <c:param name="sm" value="top_hty" />
    ...
</c:import>

 

3-2. <c:redirect> 태그

/* response.sendRedirect()처럼 지정페이지로 리다이렉트 */
<c:redirect url="URL" [context="컨텍스트경로"]>
    <c:param name="이름" value="값" />
</c:redirect>
---ex>
<c:redirect url="test.jsp" />
<c:redirect url="test.jsp" context="/jsp" />
<c:redirect url="https://search.naver.com/search.naver">
    <c:param name="where" value="nexearch" />
    <c:param name="sm" value="top_hty" />
    ...
</c:redirect>

 

3-3. <c:url> 태그

<c:url value="URL" [var="변수"] [scope="영역"]>
    <c:param name="이름" value="값" />
</c:url>
---ex>
<c:url value="https://search.naver.com/search.naver" var="naverSearch">
    <c:param name="where" value="nexearch" />
    <c:param name="sm" value="top_hty" />
    ...
</c:url>
${naverSearch}
<%-- 결과
https://search.naver.com/search.naver?where=nexearch&sm=top_hty...
--%>

4. 기타 코어 태그

4-1. <c:catch> 태그

/* exception을 EL태그에 저장 */
<c:catch var="익셉션변수">
   ...
   익셉션 발생할 수 있는 코드
   ...
</c:catch>
...
${익셉션변수}
---ex>
<c:catch var="ex">
   <%= request.getParameter("phone") %> <br>
<% if(request.getParameter("phone").equals('01011112222')) { %>
${param.phone}은 01011112222 입니다.
<% } %>
</c:catch>
<c:if test="${ex != null}">
익셉션 발생!!!<br>
${ex}
</c:if>
<%-- phone의 파라미터가 존재하지 않을경우
     NullPointerException 발생
     ex 변수에 저장된 값이 null이 아닐경우
     익셉션 발생면 if문 실행
--%>

 

4-2. <c:out> 태그

<c:out value="값" [escapeXml="(true|flase)"] [default="디폴트값"] />
<c:out value="값" [escapeXml="(true|flase)"]>
     디폴트값
</c:out>
<%-- escapeXml 속성이 true일 경우 변환되는 문자
     <    &lt;
     >    &gt;
     &    &amp;
     '    &#039;
     "    &#034;
--%>
---ex>
<% String test = "<p>hello</p>";
   request.setAttribute("test", test);
%>
<c:out value="${test}" escapeXml="false" />
<c:out value="${test}" escapeXml="true" />
<c:out value="${test}" />
<%-- 결과 : hello
           <p>hello</p>
           <p>hello</p>
--%>

 

 

그래서 오늘은 코어 태그 라이브러리에 사용법과 예시를 간략하게 적어봤다.

참고할 만한 소스가 되었으면 좋겠다.

Comments