본문 바로가기
Backend/Servlet & JSP

[Servlet & JSP] JSTL core

by Forsaken Developer 2023. 5. 30.
728x90
728x90

[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도 함께 저장할 수 있다.

 

728x90
반응형

'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

댓글