: html 코드와 섞이면서 코드의 가독성이 나빠짐
=> html태그와 비슷한 코드를 사용해 처리할 수 있다면? html태그와 비슷한 태그를 사용해서 반복문이나 조건문을 처리할 수 있다면?
: jsp에서 새로운 태그를 추가할 수 있는 기능 제공
: <jsp:include>나 <jsp:useBean>과 같은 액션태그처럼 커스텀 태그도 특수 기능을 수행하도록 작성할 수 있음
: jsp 페이지에서 많이 사용되는 논리적인 판단, 반복처리, 포맷 처리를 위한 커스텀 태그를 표준으로 만들어서 정의
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
[사용방법 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 var="varName" [scope="영역"]/>
Ex)
<c:remove var="name"/>
→ 모든 영역에 저장된 "name" 속성이 모두 삭제
<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 test="${memver.level == 'regular'}"> ... </c:when> <c:when test="${memver.level == 'trial'}"> ... </c:when> <c:otherwise> ... </c:otherwise> </c:choose>
: 배열, 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