1. jstl(jsp standard tag library)

1) jsp 스크립트 코드 사용의 문제

: html 코드와 섞이면서 코드의 가독성이 나빠짐
=> html태그와 비슷한 코드를 사용해 처리할 수 있다면? html태그와 비슷한 태그를 사용해서 반복문이나 조건문을 처리할 수 있다면?

2) 커스텀 태그

: jsp에서 새로운 태그를 추가할 수 있는 기능 제공
: <jsp:include>나 <jsp:useBean>과 같은 액션태그처럼 커스텀 태그도 특수 기능을 수행하도록 작성할 수 있음

3) jstl

: jsp 페이지에서 많이 사용되는 논리적인 판단, 반복처리, 포맷 처리를 위한 커스텀 태그를 표준으로 만들어서 정의


2. jstl이 제공하는 태그의 종류


3. 코어 태그 라이브러리

※ taglib 디렉티브 추가

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

1) 변수 지원 태그

① <c:set> 태그

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

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

Ex)

<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] 객체의 프로퍼티 값 설정

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

Ex)

<% Member member = new Member(); %>
<c:set target="<%=member%>" property="name" value="홍길동1"/>
<%-- member.setName("홍길동1")-->

<c:set var="m" value="<%=member%>"/>
<c:set target="${m}" property="name" value="홍길동2"/>
<%-- member.setName("홍길동2")-->

<% Map<String, String> prop = new HashMap<String,String>(); %>
<c:set target="<%=prop%>" property="host" value="localhost"/>
<%-- prop.put("host","localhost")-->

② <c:remove> 태그

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

Ex)

<c:remove var="name"/>

→ 모든 영역에 저장된 "name" 속성이 모두 삭제

2) 흐름 제어 태그

① <c:if> 태그

<c:if test="조건">
...
</c:if>
<c:if test="true"> ... </c:if> => 항상 true
<c:if test="some txt"> ... </c:if> => 항상 false
<c:if test="<%=someCondition%>" var="result"> ... </c:if> => ${result}

Ex)

<c:if test="${param.name == 'bk'}">
name 파라미터의 값이 ${param.name} 입니다.
</c:if>

② <c:choose> <c:when> <c:otherwise> 태그

<c:choose>
    <c:when test="${memver.level == 'regular'}"> ... </c:when>
    <c:when test="${memver.level == 'trial'}"> ... </c:when>
    <c:otherwise> ... </c:otherwise>
</c:choose>

③ <c:forEach> 태그

: 배열, collection 또는 map에 저장된 값을 순차적으로 처리

<c:forEach var="변수" items="아이템"> ... </c:forEach>
<c:forEach var="i" begin="1" end="10"> ... </c:forEach>
<c:forEach var="i" begin="1" end="10" step="2"> ... </c:forEach> =>1,3,5,7,9
<c:forEach var="i" items="${intArray}" begin="2" end="4"> ... </c:forEach>
<c:forEach var="item" items="<%= someItemList %>" 
	varStatus="status"> ... </c:forEach>
=> varStatus 속성을 이용해 인덱스 값을 사용할 수 있다.

Ex)

<c:set var="intArray" value="<%= new int[] {1,2,3,4,5}%>"/>
<c:forEach var="i" items="${intArray}" 
	begin="2" end="4" varStatus="status">
    		${status.index}-${status.count}-[${i}]<br> 
</c:forEach>
=> 
2-1-[3]
3-2-[4]
4-3-[5]
<%
	HashMap<String,Object> mapDate = new HashMap<String,Object>();
	mapData.put("name", "홍길동");
	mapData.put("today", new java.util.Date());
%>
<c:set var="map" value="<%= mapDate %>"/>
<c:forEach var="i" items="${map}">
	${i.key} = ${i.value}<br>
</c:forEach>
=> 
name = 홍길동
today = Fri Jul 17 12:12:15 KST2020

0개의 댓글