JSTL (JavaServer Pages Standard Tag Library - 자바서버 페이지 표준 태그 라이브러리)
The JavaServer Pages Standard Tag Library (JSTL) encapsulates, as simple tags, core functionality common to many JSP applications. For example, instead of suggesting that you iterate over lists using a scriptlet or different iteration tags from numerous vendors, JSTL defines a standard tag that works the same everywhere. This standardization lets you learn a single tag and use it on multiple JSP containers. Also, when tags are standard, containers can recognize them and optimize their implementations.
https://www.oracle.com/java/technologies/jstl-documentation.html
자바서버 페이지 표준 태그 라이브러리(JSTL)는 많은 JSP 애플리케이션에서 공통적으로 사용하는 코어 기능을 간단한 태그로 캡슐화하였습니다. 예를 들어, 많은 벤더들의 다른 반복 태그 또는 스크립틀릿(Scriptlet)을 사용하여 리스크를 반복하는 제안 대신에 JSTL은 어디서나 동일하게 작동하는 표준 태그를 정의합니다. 표준화는 단일 태그를 학습으로 여러 JSP 컨테이너에서 사용할 수 있게 해 줍니다. 또한 태그가 표준이면 컨테이너는 인지하고 구현을 최적화할 수 있습니다.
Scriptlet(스크립틀릿 <% %>)을 <html> 코드와 섞어 사용하다 보니 복잡하고 가독성이 떨어지는 문제점이 있어 복잡성을 낮추고 가독성을 높이기 위해서는 Server-Side(서버사이드) 코딩들을 JSP에서 사용하지 않고 처리된 결과만 JSP에서 처리하는 게 좋습니다.
Maven Spring Project에 JSTL 적용하기
1. 메이븐 리포지토리(https://mvnrepository.com)에서 "JSTL"으로 검색합니다. 검색된 결과 중에 "javax.servlet > jstl"인 JSTL를 선택합니다.
2. "Version"중에서 "1.2"를 선택합니다. 그리고 [Maven] 탭을 선택하고 복사합니다.
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
3. 메이븐 프로젝트에서 pom.xml 파일을 오픈하고 복사한 내용을 붙여 넣기하고 저장합니다.
4. 다시 메이븐 리포지토리(https://mvnrepository.com)에서 "taglibs-standard-impl"으로 검색합니다. 검색된 결과 중에 "org.apache.taglibs > taglibs-standard-impl"인 Apache Standard Taglib Implementation를 선택합니다.
5. "Version"중에서 "1.2.5"를 선택합니다. 그리고 [Maven] 탭을 선택하고 복사합니다.
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
<scope>runtime</scope>
</dependency>
6. 메이븐 프로젝트에서 pom.xml 파일을 오픈하고 복사한 내용을 붙여 넣기하고 저장합니다.
그러면 자동으로 JSTL 라이브러리 파일(JAR)들이 다운로드됩니다.
jstl-1.2.jar
taglibs-standard-impl-1.2.5.jar
링크를 클릭하면 바로 받을 수 있습니다.
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl/1.2.5
7. WEB-INF/config 폴더에서 dispatcher-servlet.xml 파일 오픈합니다. JSTL를 적용하기 위해서 ViewResolver의 viewClass에 org.springframework.web.servlet.view.JstlView를 입력합니다.
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
JSTL 테스트를 위해 Maven Spring Project에서 Controller 수정하기
1. Java Resource > src/main/java에서 com.home.study.test1.main.controller 패키지에 있는 MainController.java 파일을 클릭하여 오픈합니다.
- JSP 페이지에서 JSTL의 반복문을 이용하여 데이터를 출력하기 위해 문자열 배열(ArrayList)을 생성합니다.
- 생성된 문자열 배열을 JSP 페이지로 전달하기 위해 model에 "memberList"로 추가(addAttribute)합니다.
@Controller
public class MainController {
@RequestMapping("/index")
public String mainIndex(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
List<String> memberIDList = new ArrayList<String>();
memberIDList.add("testid1");
memberIDList.add("testid2");
memberIDList.add("testid3");
memberIDList.add("testid4");
memberIDList.add("testid5");
model.addAttribute("memberList", memberIDList);
return "main/main";
}
}
Maven Spring Project에 JSP 수정하기
1. WEB-INF/views/main 폴더에서 main.jsp 파일을 클릭하여 오픈합니다. JSTL은 라이브러리이기 때문에 JSP에서 사용하기 위해서 taglib로 추가해야 합니다. JSTL의 코어(Core)를 추가합니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
JSTL Taglib의 종류는 다음과 같습니다.
taglib | uri | prefix | 설명 |
Core | http://java.sun.com/jsp/jstl/core | c | 변수 설정, 조건문, 반복문, 예외처리, URL 처리 |
Function | http://java.sun.com/jsp/jstl/functions | fn | 문자열 처리 |
Formatting | http://java.sun.com/jsp/jstl/fmt | fmt | 숫자 처리, 시간/날짜 처리, 국제화 처리 |
SQL | http://java.sun.com/jsp/jstl/sql | sql | SQL 처리 |
XML | http://java.sun.com/jsp/jstl/xml | x | XML 처리 |
2. <BODY>에 JSTL의 반복문을 이용하여 컨트롤에서 전달받은 "memberList"를 출력합니다.
JSTL의 반복문인 <c:forEach> 태그는 시작(begin)부터 끝(end)까지 증가 값(step) 만큼 증가해서 반복적으로 변수(var)에 값(value)이 적용됩니다. 자바의 for, while, do while문과 같습니다.
<c:forEach var="order" begin="1" end="10" step="1">
Order ${order}"<br />
</c:forEach>
또는 컬렉션(items)에서 객체를 가져와서 변수(var)에 적용합니다. 자바의 foreach문과 같습니다.
<c:forEach var="orderObject" items="${orderList}" varStatus="status">
Order ${status.count}. ${orderObject.productName}<br />
</c:forEach>
varStatus는 반복문의 상태 정보를 알려줍니다.
${status.current}는 현재의 객체입니다. 변수(var)와 동일합니다. 변수(var)가 없어도 됩니다.
${status.index}는 반복문의 현재 인덱스입니다. "0"부터 시작합니다.
${status.count}는 반복문의 현재 순서입니다. "1"부터 시작합니다.
${status.first}는 반복문의 현재 인덱스가 처음이면 "true"를 리턴합니다.
${status.last}는 반복문의 현재 인덱스가 마지막이면 "true"를 리턴합니다.
${status.begin}는 시작 값을 리턴합니다.
${status.end}는 끝 값을 리턴합니다.
${status.step}는 증가 값을 리턴합니다.
컨트롤에서 전달받은 "memberList"가 배열임으로 컬렉션(items) 방식으로 처리하겠습니다.
그리고 컨트롤에서 전달받은 "memberList"를 사용하기 위해서는 EL (Expression Language)로 사용하면 됩니다.
EL (Expression Language)은 JSP 페이지에서 Scriptlet(스크립틀릿 <% %>)이나 <jsp:useBean>를 사용하지 않고 컨트롤에서 전달받은 객체를 쉽게 사용할 수 있게 해주는 언어입니다. 간단하게 "${}"에 전달받은 객체를 적용하면 됩니다.
items="${memberList}"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<c:forEach var="memberItem" items="${memberList}" varStatus="status">
<div>${status.count}. Hello World ${memberItem}</div>
</c:forEach>
</body>
</html>
Maven Spring Project를 실행하여 웹 브라우저로 확인하기
1. "Servers"탭에서 "Tomcat9"를 선택하고 "start"버튼(start the server)을 클릭하면 Tomcat이 실행됩니다.
2. 웹 브라우저에서 "http://localhost:9000/index.do"를 입력합니다.
이제 JSTL를 이용하여 JSP 페이지를 만들 수 있게 되었습니다.
'Spring > Maven Project' 카테고리의 다른 글
Spring에 SiteMesh 적용 (SiteMesh 3.0.1) (0) | 2022.09.11 |
---|---|
Spring에 Filter 적용 (javax.servlet.Filter) (0) | 2022.09.11 |
Spring에 DispatcherServlet 적용 (Servlet, Component-Scan, ViewResolver), Controller 추가 (0) | 2022.09.06 |
Spring에 Servlet, Build Plugin, web.xml 적용 (javax.servlet-api 3.1.0, maven-compiler-plugin) (0) | 2022.09.06 |
Eclipse에 Spring Framework 적용 (spring-webmvc 5.2.22) (0) | 2022.09.03 |