JSP

11.30.(수) JSP(8): JSTL(1)

콜라든포비 2022. 12. 4. 16:44

JSP Standard Tag Library

JSTL은 Java EE 기반의 웹 애플리케이션 개발 플랫폼을 위한 컴포넌트 모음이다. JSTL은 XML 데이터 처리와 조건문, 반복문, 국제화와 지역화와 같은 일을 처리하기 위한 JSP 태그 라이브러리를 추가하여 JSP 사양을 확장했다.

JSTL을 사용하기 위해서는 라이브러리를 프로젝트에 직접 추가해줘야한다.

https://tomcat.apache.org/download-taglibs.cgi

 

Apache Tomcat® - Apache Taglibs Downloads

Welcome to the Apache Taglibs download page. This page provides download links for obtaining the latest version of the Apache Standard Taglib, as well as links to the archives of older releases. You must verify the integrity of the downloaded files. We pro

tomcat.apache.org

여기에서 Apache Standard Taglib버튼을 누르면 .jar파일들을 다운로드받을 수 있는 페이지가 나온다.

jakarta-taglibs-standard-1.1.2.zip

위 압축파일을 다운 받아서 lib폴더 안에 있는 두개의 .jar파일을 프로젝트의 WEB-INF/lib폴더에 복사해주자.

JSTL은 하나의 라이브러리이기 때문에 지시부에서 추가해주어야한다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

이제 <c:~~>를 통해서 JSTL태그를 사용할 수 있다.

Set태그

<c:set var="변수이름" value="변수값">

set태그는 변수를 선언하거나 삭제할때 이용한다.

보통 jsp에서 변수를 선언할땐 우린 이렇게 했다.

<%
    // jsp에서 변수선언
    int num = 1111;
    String name = "Sangmin Kim";

    out.println("num=" + num + "<br>");
%>
<%= name %>

하지만 set태그를 이용하면 html에서 변수선언을 할 수 있다.

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- jstl태그를 사용하기 위해서는 지시부에 tag library에 대한 정의가 필수다 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl01_setTag.jsp</title>
</head>
<body>
	<h1>JSTL : JSP Standard Tag Library</h1>
	<h1>set태그 : 변수를 선언하거나 삭제할 때</h1>
	<%
		// jsp에서 변수선언
		int num = 1111;
		String name = "Sangmin Kim";
		
		out.println("num=" + num + "<br>");
	%>
	<%= name %><br>
	
	<h2>JSTL로 변수 선언하기</h2>
	<c:set var="age" value="12"></c:set>
	<c:set var="class1" value="2"/>
	<c:set var="addr">Gangnam-gu, Seoul</c:set>
	<c:set var="today" value="<%= new Date() %>"></c:set>
</body>
</html>

이렇게 선언된 변수는 Expression Language로 표현할 수 있다.

형식은 이렇다.

${ 변수이름 }

jsp로 변수를 선언하고 <%= %>으로 불러오는 것과 다른 점은, jsp로 선언된 변수는 Expression Language로 불러올 수 없다는 점이다. 하지만 에러메시지는 클라이언트에게 표시되지 않고, 그냥 빈 칸으로 나타난다.

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- jstl태그를 사용하기 위해서는 지시부에 tag library에 대한 정의가 필수다 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl01_setTag.jsp</title>
</head>
<body>
	<h1>JSTL : JSP Standard Tag Library</h1>
	<h1>set태그 : 변수를 선언하거나 삭제할 때</h1>
	<%
		// jsp에서 변수선언
		int num = 1111;
		String name = "Sangmin Kim";
		
		out.println("num=" + num + "<br>");
	%>
	<%= name %><br>
	
	<h2>JSTL로 변수 선언하기</h2>
	<c:set var="age" value="12"></c:set>
	<c:set var="class1" value="2"/>
	<c:set var="addr">Gangnam-gu, Seoul</c:set>
	<c:set var="today" value="<%= new Date() %>"></c:set>
	
	<h1>EL : Expression Language</h1>
	<pre>
	JSTL로 선언된 변수
	request, session, application 등 내장객체가 가지고 있는 정보를 사용할 수 있음
	</pre>
	Age = ${ age }<br>
	Class = ${ class1 }<br>
	Address = ${ addr }<br>
	Date = ${ today }<br>
	
	<h2>JSP로 선언된 변수는 JSTL로 불러올 수 없지만, 에러는 안 뜨고 ""문자로 처리한다.</h2>
	num -> ${ num }<br>
	<%-- addr --%>
	<hr>
	
	<h2>EL 표현식</h2>
	수식 age+20 = ${ age+20 }<br>
	수식 100/200 = ${ 100/200 }<br>
	수식 age>10 ? ${ age>10 }<br>
	<c:set var="num" value="${ age+50 }"/>
	num = ${ num }<br>
</body>
</html>

EL 안에서 간단한 연산도 할 수 있다.

변수를 삭제하려면 <c:remove>를 이용한다. scope라는 범위를 지정해서 삭제해야하는데, scope에 들어갈 수 있는 범위는 application, session, page, request가 있다.

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- jstl태그를 사용하기 위해서는 지시부에 tag library에 대한 정의가 필수다 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jstl01_setTag.jsp</title>
</head>
<body>
	<h1>JSTL : JSP Standard Tag Library</h1>
	<h1>set태그 : 변수를 선언하거나 삭제할 때</h1>
	<%
		// jsp에서 변수선언
		int num = 1111;
		String name = "Sangmin Kim";
		
		out.println("num=" + num + "<br>");
	%>
	<%= name %><br>
	
	<h2>JSTL로 변수 선언하기</h2>
	<c:set var="age" value="12"></c:set>
	<c:set var="class1" value="2"/>
	<c:set var="addr">Gangnam-gu, Seoul</c:set>
	<c:set var="today" value="<%= new Date() %>"></c:set>
	
	<h1>EL : Expression Language</h1>
	<pre>
	JSTL로 선언된 변수
	request, session, application 등 내장객체가 가지고 있는 정보를 사용할 수 있음
	</pre>
	Age = ${ age }<br>
	Class = ${ class1 }<br>
	Address = ${ addr }<br>
	Date = ${ today }<br>
	
	<h2>JSP로 선언된 변수는 JSTL로 불러올 수 없지만, 에러는 안 뜨고 ""문자로 처리한다.</h2>
	num -> ${ num }<br>
	<%-- addr --%>
	<hr>
	
	<h2>EL 표현식</h2>
	수식 age+20 = ${ age+20 }<br>
	수식 100/200 = ${ 100/200 }<br>
	수식 age>10 ? ${ age>10 }<br>
	<c:set var="num" value="${ age+50 }"/>
	num = ${ num }<br>
	
	<h2>변수 삭제</h2>
	<pre>
	scope : 생명 주기
		application, session, page, request 사용 가능
	</pre>
	<c:remove var="age" scope="page"/>
	age = ${ age }
</body>
</html>