BackEnd/JSP & Servlet

[JSP] JSTL(JSP Standard Tag Library)

코딩마루 2022. 12. 24. 00:35

1. JSTL이란?

JSTL(JSP Standard Tag Library)은 JSP 페이지에서 조건문 처리, 반복문 처리 등을 html tag 형태로 작성할 수 있게 도와준다. JSTL을 사용하려면 먼저 아래 URL로 접속하여 세 개의 jar 파일을 다운 받아야 한다.

위 URL에 접속하면 몇 개의 jar 파일이 존재하는데 아래 세 가지를 다운받으면 된다.

그리고 다운받은 jar 파일은 아래와 같이 WEB-INF/lib 폴더 아래에 넣어주면 된다. 

JSTL은 다음과 같은 태그를 제공한다.

라이브러리 하위 기능 접두어
코어 변수 지원
흐름 제어
URL 처리
c
XML XML 코어
흐름 제어
XML 변환
x
국제화 지역
메시지 형식
숫자 및 날짜 형식
fmt
데이터베이스 SQL sql
함수 콜렉션 처리
String 처리
fn

2. 코어 태그

코어 태그는 논리적인 흐름을 태그로 처리할 수 있도록 도와준다. 또한 어떤 URL에 있는 내용을 읽어오거나 출력하는 기능도 제공한다. 코어 태그의 종류는 아래와 같다.

기능 태그 설명
변수 지원 set JSP에서 사용될 변수를 설정한다.
remove 설정한 변수를 제거한다.
흐름 제어 if 조건에 따라 내부 코드를 수행한다.
choose 다중 조건을 처리할 때 사용된다.
forEach 콜렉션이나 Map의 각 항목을 처리할 때 사용된다.
forTokens 구분자로 분리된 각 토큰을 처리할 때 사용된다.
URL 처리 import URL을 사용하여 다른 자원의 결과를 삽입한다.
redirect 지정한 경로로 Redirect한다.
url URL을 재작성한다.
기타 catch 예외 처리에 사용된다.
out JspWriter에 내용을 알맞게 처리한 후 출력한다.

3. set, remove 태그

set 태그는 JSP의 네 가지 scope 중 하나에 값을 저장할 수 있다. set 태그는 아래 두 방중 하나를 선택하여 사용하면 된다.

<%-- 방법1 --%>
<c:set var="valName1" scope="request" value="value" /> 

<%-- 방법2 --%>
<c:set var="valName2" scope="session">
"value"
</c:set>

remove의 경우 원하는 scope에서 변수를 제거해준다. remove 태그는 아래와 같이 사용하면 된다.

<c:remove var="varName" scope="application" />

아래는 set/remove 태그의 예제 코드다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="value1" scope="request" value="I'm value1"> </c:set>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

결과: ${requestScope.value1} <br>
<c:remove var="value1" scope="request" />

</body>
</html>

먼저 코어 태그들을 위해 접두어 c를 사용하기 위해서는 위처럼 접두어 "c"를 원하는 uri에서 지정한 방식으로 사용하겠다는 의미로 "<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>"를 선언해준다. 그리고 이전에 set 태그를 통해 value1을 생성하고, value1을 출력하는 JSP를 작성한다. 이후 다 사용한 value1은 remove 태그로 제거해줬다.

4. 변수 지원 태그 - 프로퍼티, 맵의 처리

변수 지원 태그를 사용하면 프로퍼티나 맵을 처리할 수 있다. 이때 프로퍼티(Property)란 객체의 값을 변경하거나 읽기 위한 getter, setter 메소드를 생각하면 된다. 변수 지원 태그로는 set을 사용하는데 다음과 같은 방식으로 사용한다.

<c:set target="${some}" property="propertyName" value="value" />

위와 같이 사용하면 some이라는 객체가 가진 some.setPropertyName에 전달된 value값을 넣게 된다. some 객체가 map이라면 some.put(propertyName, value) 메서드를 수행하게 된다.

5. if 태그

if 태그를 사용하면 조건문을 나타낼 수 있지만 else에 대한 처리는 존재하지 않는다. if 태그의 문법은 다음과 같다.

<c:if test="codition"> 
	some codes... 
</c:if>

위에서 test의 조건이 true가 되면 태그 안에 작성된 코드들이 실행되게 된다. 아래는 if 태그 예시 코드다.

<c:set var="value" scope="request" value="10"/>

<body>
<c:if test="${requestScope.value eq 10}"> 
	value는 10입니다.
</c:if>
<c:if test="${requestScope.value ne 10}"> 
	value는 10이 아닙니다.
</c:if>
</body>

6. choose 태그

choose 태그도 if 태그와 같이 흐름제어를 위해 사용되며 아래와 같이 사용가능하다.

<c:choose>
	<c:when test="condition1">
		some codes...
	</c:when>
	<c:when test="condition2">
		some codes...
	</c:when>
	<c:otherwise>
		some codes...
	</c:otherwise>
</c:choose>

7. forEach 태그

forEach 태그를 사용하면 배열 및 Collection에 저장된 요소를 차례대로 처리하여 for문과 비슷하게 사용할 수 있다. 사용법은 아래와 같으며 items에는 배열, List, Iterator 등이 들어갈 수 있다. (대괄호는 생략 가능하다는 의미다.)

<c:forEach var="varName" items="item" [begin="start index"] [end="end index"]>
	some codes...
</c:forEach>

아래는 forEach 태그의 예제 코드다.

<%
	List<String> list = new ArrayList<>();
	list.add("value1");
	list.add("value2");
	
	request.setAttribute("list", list);
%>

<body>

<c:forEach var="item" items="${requestScope.list }">
${item }<br>
</c:forEach>

</body>

8. import 태그

import 태그는 특정 url 페이지의 결과를 읽고 그 결과를 변수에 저장하여 사용할 수 있게 해준다. 사용법은 아래와 같다.

<c:import url="URL" charEncoding="Encoding" var="varName" scope="scope">
	<c:param name="paramName" value="value"/>
</c:import>

예제 코드는 아래와 같다.

<c:import url="http://localhost:8080/firstweb/jstl02.jsp"  var="urlValue" scope="request"/>
<body>
${requestScope.urlValue}
</body>

9. redirect 태그

redirect 태그를 사용하면 redirect를 수행할 수 있다. 사용법은 아래와 같다.

<c:redirect url="redirect URL">
	<c:param name="paramName" value="value"/>
</c:redirect>

 예제 코드는 아래와 같다.

<c:redirect url="http://localhost:8080/firstweb/jstl02.jsp"></c:redirect>

10. out 태그

out 태그는 JspWriter에 데이터를 출력할 때 사용한다. 사용 형식은 다음과 같다.

<c:out value="value" excapeXml="true or false" default="defaultValue"/>

References

https://www.boostcourse.org/web326/joinLectures/28762