JSTL
(JSP Standard Tag Library)는 JSP페이지에서 많이 사용되는
논리적인 판단, 반복처리, 포맷처리를 위한 커스텀 태그를 표준으로 만들어 정의한 라이브러리
가독성이 떨어짐
JSTL
maven
의존 설정
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
jar
파일을 WEB-INF/lib 디렉토리에 복사태그
는 다음과 같은 종류가 존재코어
c
XML
x
국제화
fmt
DataBase
sql
함수
fn
c tag(코어)
코어 태그 라이브러리는 변수 설정
이나 논리 처리
에 사용되는 스크립트 코드를 대체하는 태그를 제공
<c:set>
태그는 EL 변수 값
혹은 EL 변수의 프로퍼티 값
을 지정하거나, JSTL 태그
에서 사용할 변수의 값을 처리할 때 다음과 같이 사용
<c:set var="varName" value="varValue" [scope="지정영역"] />
<c:set target="대상" property="프로퍼티 이름" value="값" />
<!-- 첫번째 사용법 (jstl 변수를 생성하여 사용하는법) -->
<c:set var="test1" value="니나노"/>
<!-- 두번째 사용법 (빈즈활용) -->
<!-- 자바 빈즈가 필요함. 한페이지에서 설명하기위해.. map 으로 대체 -->
<% Map<String, String> member = new HashMap<String, String>();
member.put("name", "홍길동");
%>
<c:set var="member" value="<%=member%>"/>
<div style="background-color: yellow;">${member.name}</div>
<c:set target = "<%=member%>" property = "name" value = "홍길동2"/>
실행결과
니나노
홍길동
홍길동2
홍길동2
<c:remove>
태그는 <c:remove var="varName" [scope="지정영역"] />
<c:set var="test1" value="니나노"/>
<div style="background-color: yellow;">${test1}</div>
<!-- c:remove 사용하여 c:set 변수를 삭제 -->
<c:remove var = "test1"/>
<div style="background-color: yellow;">${test1}</div>
실행결과
니나노
(빈 텍스트가 출력 됨)
<c:if>
태그는 조건의 참/거짓
유무에 따라 분기하며 다음과 같이 사용
else는 따로 존재하지 않음, 따라서
choose
를 사용
<c:if test="조건" [var = "testResult"]/>
<c:set var="test1" value="3"/>
<c:if test="${test1 > 1}">
<div style="background-color: yellow;">1보다 크다</div>
</c:if>
<c:if test="${test1 < 1}">
<div style="background-color: yellow;">1보다 작다</div>
</c:if>
실행결과
1보다 크다
<c:choose>
, <c:when>
, <c:otherwise>
태그를 else if, else 대신 다음과 같이 함께 사용
<c:chose>
<c:when test="조건">실행문</c:when>
<c:otherwise>실행문</c:otherwise>
</c:chose>
<c:set var="test1" value="3"/>
<c:choose>
<c:when test="${test1 < 1}">
<div style="background-color: yellow;">1보다 작음</div>
</c:when>
<c:when test="${test1 == 3}">
<div style="background-color: yellow;">3과 같음</div>
</c:when>
<c:otherwise>
<div style="background-color: yellow;">쩌리</div>
</c:otherwise>
</c:choose>
실행결과
3과 같음
<c:forEach>
태그는 자바의 for
문과 동일하며, 다음과 같이 사용
<c:forEach var="변수" item = "아이템" [begin ="시작값" end="종료값" step="증가값" varStatus="현재의값"]/>
<!-- memberList라는 구조체가 존재하며 프로퍼티 값은 name, age를 가짐 -->
<c:forEach var="member" items="<%=memberList %>" >
<div style="background-color: yellow;">
이름 : ${member.name} 나이 : ${member.age}
</div>
</c:forEach>
실행결과
이름: 홍길동 나이: 21
이름: 김순이 나이: 23
<c:forTokens>
태그는 자바의 split
기능과 유사하며, 다음과 같이 사용
<c:forTokens var="변수" items="아이템" delims="자를 문구" [varStatus="status"]/>
<c:set var="nameGroup" value="철수,영미,나미,우솝,루피"/>
<c:forTokens var="name" items="${nameGroup}" delims=",">
<div style="background-color: yellow;">
이름 : ${name}
</div>
</c:forTokens>
실행결과
이름: 철수
이름: 영미
이름: 나미
이름: 우솝
이름: 루피
<c:url value = "링크"/>
<c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
<c:redirect url="value" [context="context"]/>
<c:catch var="명칭"></c:catch>
<c:out value="value" [escapeXml="{true|false}"] [default="value가 없을 때 표시될 문자"] />