[Servlet & JSP] JSTL core
JSTL(JavaServer Pages Standard Tag Library)은 JSP 페이지에서 자주 사용되는 태그들을 모은 라이브러리이다.
배열, 리스트, 맵 등의 자바 컬렉션을 다루기 위해 필요한 for문이나 조건문 처리와 같은 제어문도 간단한 태그로 처리할 수 있다.
JSTL을 사용하면 자바 코드의 양을 줄이고 JSP 페이지의 가독성과 유지보수성을 높인다.
JSTL을 사용하기 위해서 라이브러리를 설치한다.
https://mvnrepository.com/artifact/jstl/jstl
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
taglib 지시자 태그를 통해서 prefix를 c로 설정하고 uri을 위의 링크로 설정한다.
tag들이 c: 이라는 접두사를 붙이게 되는데 접두사가 붙은 태그 요소가 링크에 있는 문법에 맞게 정의되어 있는지 유효성을 검증한다.
c : set
<c:set var="num1" value="1" scope="session"/>
<c:set var="num2" value="2" scope="session"/>
<c:set var="sum" value="${num1 + num2}"/>
num1+ num2 = ${sum} <br>
c:set으로 attribute를 설정하고 el표현식으로 출력 할 수 있다.
<% int num3 = 3, num4 = 4; %>
<c:set var="sum2" value="<%=num3 + num4 %>"/>
num3 + num4 = ${sum2} <br>
만약 변수에 저장되어 있는 값을 저장하고 싶다면 value 속성에 표현식 태그를 통해서 접근할 수 있다.
<c:set var="colors">
red,green,blue
</c:set>
colors : ${colors} <br>
시작 태그와 닫기 태그 사이에 여러 값을 저장할 수 있다.
c : remove
<c:remove var="num1" scope="session"/>
<c:remove var="num2" scope="session"/>
값을 제거할 때는 c:remove로 제거하려는 attribute를 설정한다.
scope를 생략하게 되면 모든 scope의 동일한 이름의 attribute를 모두 제거한다.
c : out
<%-- 데이터출력 --%>
<c:out value="<div>데이터출력</div>" escapeXml="false"/>
<%-- <div>데이터출력</div> --%>
<c:out value="<div>데이터출력</div>" escapeXml="true"/>
c:out으로 value의 값을 출력해줄 수 있다.
이 때 escapeXml을 설정할 수 있는데 escapeXml가 true이면 value를 태그가 아닌 문자열로 취급한다.
악의적인 스크립트 공격을 막을 수 있도록 기본값은 true로 하여 보안처리 하였다.
따라서 서버 측에서 이전 페이지에서 입력한 값을 출력해 줄 때는 cout의 value에 el표현식을 사용해서 escape sequence 처리해서 악의적인 스크립트 공격을 방지한다.
<c:out value="${param.name}" default="회원님"/> <br>
default 속성을 통해서 가져온 값이 존재하지 않을 때 기본 값을 출력한다.
c : if
<c:set var="value1" value="1"/>
<c:set var="value2" value="2"/>
<c:if test="${Integer.parseInt(value1) >= Integer.parseInt(value2)}">
<div>value1</div>
</c:if>
<c:if test="${value1 + 0 < value2 + 0}">
<div>value2</div>
</c:if>
c : if를 통해서 조건에 맞는 값을 출력할 수 있다.
else 조건이 따로 없어서 반대 조건에 새로 c : if를 사용해야 한다.
이 때 value의 값은 문자열 비교를 하기때문에 숫자 비교를 하려면 parseInt로 형변환 하거나 연산의 성질을 이용해서 형변환하여 비교한다.
c : choose, c : when, c : otherwise
<c:set var="no" value="${param.no}"/>
<c:choose>
<c:when test="${no==1}"><div>1</div></c:when>
<c:when test="${no eq 2}"><div>2</div></c:when>
<c:otherwise><div>3</div></c:otherwise>
</c:choose>
c : choose는 switch문처럼 c : when과 함께 사용하여 조건에 맞게 값을 출력할 수 있고 그 밖의 조건은 c : otherwise로 처리한다.
c : when에 test라는 속성에 조건문을 적어주어 사용한다.
c : foreach
<c:forEach var="size" step="1" begin="1" end="5">
<font size="${size}">font size : ${size}</font> <br>
</c:forEach>
c : foreach로 반복문을 사용할 수 있다.
beign과 end로 반복 시작점과 끝을 정할 수 있고 step으로 증감값을 정할 수 있다.
<c:forEach var="color" items="${colors}" varStatus="st">
<font color="${color}">${st.index} font color : ${color}</font> <br>
</c:forEach>
반복문에서 접근하려는 컬렉션을 items로 설정할 수 있고 index에 접근하기 위해서 varStatus를 사용할 수 있다.
<c:forEach var="color" items="${colors}" varStatus="st">
<font color="${color}"> ${st.count} font color : ${color}</font> <br>
</c:forEach>
index 대신 count에 접근 할 수 있는데 index를 1부터 시작한다.
c : forTokens
<ul>
<c:forTokens items="red,green,blue" delims="," var="color">
<li>${color}</li>
</c:forTokens>
</ul>
문자열을 토큰으로 분리할 때 사용한다.
items에 접근하려는 문자열을 설정하고 delims에는 구분자를 설정하여 구분자를 기준으로 split하여 반복 회차마다 값을 하나씩 var에 할당하여 사용한다.
c : url
<c:url var="resultLink" value="result.jsp">
<c:param name="username" value="forsaken"/>
</c:url>
<a href="${resultLink}">결과 화면</a>
링크 정보를 사전에 정의하고 사용할 수 있다.
value에 설정한 경로를 var에 설정한 이름으로 사용할 수 있다.
c : param을 통해서 query stirng parameter도 함께 저장할 수 있다.
'Backend > Servlet & JSP' 카테고리의 다른 글
[Servlet & JSP] JSTL format과 functions (0) | 2023.05.31 |
---|---|
[Servlet & JSP] JSP EL 표현식 (0) | 2023.05.29 |
[Servlet & JSP] JSP 태그 종류 (0) | 2023.05.28 |
[Servlet & JSP] JSP의 역할 (0) | 2023.05.27 |
[Servlet & JSP] 서블릿 listener (0) | 2023.05.26 |
댓글