Spring/Maven Project

Spring에 JSTL(JavaServer Pages Standard Tag Library) 적용 (JSTL 1.2)

carrotweb 2022. 9. 11. 15:45
728x90
반응형

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 파일을 클릭하여 오픈합니다.

 

  1. JSP 페이지에서 JSTL의 반복문을 이용하여 데이터를 출력하기 위해 문자열 배열(ArrayList)을 생성합니다.
  2. 생성된 문자열 배열을 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 페이지를 만들 수 있게 되었습니다.

728x90
반응형