JSTL은 JSP 표준 태그 라이브러리의 약자입니다. JSTL은 JSP 페이지 동작을 제어하는 데 사용되는 표준 태그 라이브러리로, 반복 및 제어문, 국제화, SQL 등에 대한 태그를 제공합니다. 이 JSTL 튜토리얼에서는 JSTL 태그를 자세히 살펴볼 것입니다. 이전에 우리는 JSP EL 및 JSP Action Tags를 사용하여 HTML과 유사한 JSP 코드를 작성할 수 있었지만, 그 기능은 매우 제한적입니다. EL이나 액션 요소를 사용하여 컬렉션을 순환하거나 HTML 태그를 텍스트처럼 클라이언트 측에서 표시할 수 없습니다. 여기서 JSTL 태그가 유용한데, JSTL 태그를 사용하면 훨씬 더 다양한 작업을 수행할 수 있습니다.
JSTL
JSTL은 Java EE API의 일부이며 대부분의 서블릿 컨테이너에 포함되어 있습니다. 그러나 JSP 페이지에서 JSTL을 사용하려면 서블릿 컨테이너에 해당하는 JSTL jars를 다운로드해야 합니다. 대부분의 경우, 이들은 서버 다운로드의 예제 프로젝트에서 찾을 수 있으며 사용할 수 있습니다. 이러한 라이브러리를 웹 애플리케이션 프로젝트의 WEB-INF/lib 디렉토리에 포함해야 합니다.
JSTL jars
JSTL jars는 컨테이너별로 다르며, 예를 들어 Tomcat에서는 프로젝트 빌드 경로에 jstl.jar
및 standard.jar
jar 파일을 포함해야 합니다. 컨테이너 lib 디렉토리에 없는 경우 애플리케이션에 포함해야 합니다. Maven 프로젝트인 경우, 아래 종속성을 pom.xml
파일에 추가해야 합니다. 그렇지 않으면 JSP 페이지에서 다음 오류가 발생합니다 – eclipse Can not find the tag library descriptor for "https://java.sun.com/jsp/jstl/ core"
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
JSTL Tags
JSTL 기능을 기반으로 다섯 가지 유형으로 분류됩니다.
-
JSTL Core 태그: JSTL Core 태그는 반복, 조건 논리, 예외 처리, URL, 전송 또는 리디렉션 응답 등을 지원합니다. JSTL 코어 태그를 사용하려면 다음과 같이 JSP 페이지에 포함해야 합니다.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
이 글에서는 중요한 JSTL 코어 태그를 살펴보겠습니다.
-
JSTL 서식 및 로컬라이제이션 태그: JSTL 서식 태그는 숫자, 날짜 및 로케일 및 리소스 번들을 통한 국제화 지원을 위한 서식 지원을 제공합니다. 아래 구문을 사용하여 JSP에 이러한 jstl 태그를 포함할 수 있습니다:
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-
JSTL SQL 태그: JSTL SQL 태그는 Oracle, MySql 등과 같은 관계형 데이터베이스와의 상호 작용을 지원합니다. JSTL SQL 태그를 사용하여 데이터베이스 쿼리를 실행할 수 있으며, 아래 구문을 사용하여 JSP에 이러한 JSTL 태그를 포함할 수 있습니다:
<%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
-
JSTL XML 태그: JSTL XML 태그는 XML 문서를 처리하기 위해 XML 구문 분석, XML 데이터 변환 및 XPath 표현식 평가 등을 수행합니다. JSP 페이지에 JSTL XML 태그를 포함하는 구문은 다음과 같습니다:
<%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
-
JSTL 함수 태그: JSTL 태그는 일반적인 작업을 수행하기 위해 사용할 수 있는 여러 함수를 제공합니다. 대부분은 문자열 연결, 문자열 분할 등과 같은 문자열 조작을 위한 것입니다. JSP 페이지에 JSTL 함수를 포함하는 구문은 다음과 같습니다:
<%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>
모든 JSTL 표준 태그 URI는 https://java.sun.com/jsp/jstl/
로 시작하며 원하는 접두사를 사용할 수 있지만, 모두가 사용하는 접두사를 사용하는 것이 좋습니다. 이렇게 하면 혼란이 없습니다.
JSTL Core Tags
JSTL Core Tags는 아래 표에 나열되어 있습니다.
JSTL Core Tag | Description |
---|---|
<c:out> | To write something in JSP page, we can use EL also with this tag |
<c:import> | Same as jsp:include or include directive |
<c:redirect> | redirect request to another resource |
<c:set> | To set the variable value in given scope. |
<c:remove> | To remove the variable from given scope |
<c:catch> | To catch the exception and wrap it into an object. |
<c:if> | Simple conditional logic, used with EL and we can use it to process the exception from <c:catch> |
<c:choose> | Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise> |
<c:when> | Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’. |
<c:otherwise> | Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’. |
<c:forEach> | for iteration over a collection |
<c:forTokens> | for iteration over tokens separated by a delimiter. |
<c:param> | used with <c:import> to pass parameters |
<c:url> | to create a URL with optional query string parameters |
JSTL 튜토리얼
간단한 웹 애플리케이션에서 JSTL 코어 태그의 사용법을 살펴보겠습니다. 프로젝트에는 Java Bean이 포함되어 있어 객체 목록을 만들고 JSP에서 사용될 몇 가지 속성을 설정합니다. JSP 페이지에서는 컬렉션을 반복하는 방법, EL을 사용한 조건 논리, 기타 일반적인 사용법을 보여줍니다.
JSTL 튜토리얼 – Java Bean 클래스
package com.journaldev.model;
public class Employee {
private int id;
private String name;
private String role;
public Employee() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
JSTL 튜토리얼 – 서블릿 클래스
package com.journaldev.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.journaldev.model.Employee;
@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Employee> empList = new ArrayList<Employee>();
Employee emp1 = new Employee();
emp1.setId(1); emp1.setName("Pankaj");emp1.setRole("Developer");
Employee emp2 = new Employee();
emp2.setId(2); emp2.setName("Meghna");emp2.setRole("Manager");
empList.add(emp1);empList.add(emp2);
request.setAttribute("empList", empList);
request.setAttribute("htmlTagData", "<br/> creates a new line.");
request.setAttribute("url", "https://www.journaldev.com");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
rd.forward(request, response);
}
}
JSTL 튜토리얼 – JSP 페이지
home.jsp
코드:
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL forEach and out to loop a list and display items in table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.empList}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
<%-- simple c:if and c:out example with HTML escaping --%>
<c:if test="${requestScope.htmlTagData ne null }">
<c:out value="${requestScope.htmlTagData}" escapeXml="true"></c:out>
</c:if>
<br><br>
<%-- c:set example to set variable value --%>
<c:set var="id" value="5" scope="request"></c:set>
<c:out value="${requestScope.id }" ></c:out>
<br><br>
<%-- c:catch example --%>
<c:catch var ="exception">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${exception ne null}">
<p>Exception is : ${exception} <br>
Exception Message: ${exception.message}</p>
</c:if>
<br><br>
<%-- c:url example --%>
<a href="<c:url value="${requestScope.url }"></c:url>">JournalDev</a>
</body>
</html>
이제 URL https://localhost:8080/JSTLExample/HomeServlet
로 응용 프로그램을 실행하면 아래 이미지와 같은 응답을 얻습니다. 위의 JSTL 예제에서는 JSP 서비스 메서드 내에서 예외를 잡기 위해
c:catch
를 사용하고 있습니다. 이는 오류 페이지 구성과 다른 JSP 예외 처리입니다. JSTL 태그 및 JSTL 코어 태그 사용 예제에 대한 간략한 소개였습니다. 참고: JSTL 위키백과 페이지
Source:
https://www.digitalocean.com/community/tutorials/jstl-tutorial-jstl-tags-example