Servlet&Jsp

JSTL과 EL

코딩하는 원숭이 2021. 12. 15. 11:23

1. JSTL의 다운로드 및 설치

jstl은 자카르타에서 제공하는 자주 사용되는 필요한 기능들을 모아놓은 커스텀 태그 라이브러리이다. jsp에 내장되어 있는 기능이 아니기 때문에 톰캣 사이트에서 다운받아 설치한다.

 

2. EL의 개요

EL이란 Expression Language, 즉 표현 언어를 의미한다. EL은 jsp 스크립트 태그를 대신하여 jsp값들을 좀 더 편리하게 출력하기 위해 제공되는 언어이다. EL에서는 다음과 같은 표현식을 사용한다.

//<%=test%>
${test}

 

hello객체의 test속성 값을 출력하는 표현식은 다음과 같다.

${hello.test}
${hello['test']}
${hello["test"]}

 

3. EL의 내장 객체

내장 객체 설명
pageScope page영역에 존재하는 객체를 참조할 때 사용한다.
requestScope Request 영역에 존재하는 객체를 참조할 때 사용한다.
sessionScope session 영역에 존재하는 객체를 참조할 때 사용한다.
applicationScope application 영역에 존재하는 객체를 참조할 때 사용한다.
param 파라미터 값을 얻어올 때 사용한다.

 

4. EL의 연산자

EL의 연산자는 다음과 같은 것들이 존재한다.

연산자 설명
. 빈, 맵의 속성에 접근하기 위한 연산자이다.
[] 배열, 리스트의 요소 또는 빈, 맵의 속성에 접근하기 위한 연산자이다.
() 연산의 우선순위를 변경할 때 사용한다.
x ? a : b x의 조건이 만족하면 a를 리턴하고, 만족하지 않으면 b를 리턴한다.
empty 값이 null이거나 컬렉션의 사이즈가 null일 경우 true를 반환한다.

이외에도 산술연산자, 논리연산자, 비교연산자 등이 있다.

 

<body>
	<h3>\${5+7}=${5+7}</h3>
	<h3>\${8-3}=${8-3}</h3>
	<h3>\${6*3}=${6*3}</h3>
	<h3>\${9/3}=${9/3}</h3>
	<h3>\${10%3}=${10%3}</h3>
	<h3>\${10==9}=${10==9}</h3>
	<h3>\${5!=7}=${5!=7}</h3>
	<h3>\${7<8}=${7<8}</h3>
	<h3>\${8>8}=${8>8}</h3>
	<h3>\${15<=9}=${15<=9}</h3>
	<h3>\${7>=2}=${7>=2}</h3>
</body>

결과

5. JSTL의 기본 액션 - JSTL core

JSTL core 파트는 jstl에서 기본적인 기능들을 구현해놓은 라이브러리이다. 예를 들어 문자열을 출력하거나 반복문, 조건문과 같은 내용이 core라이브러리에 포함되어 있는 것이다.

 

이 라이브러리를 사용하기 위해서는 jsp페이지에 태그라이브러리로 등록해야 한다. 태그 작성 시 반드시 자동완성을 사용하도록 한다.

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

이 코드에서 prefix의 c는 태그를 사용할 때 항상 붙는 접두어가 된다.

 

출력 태그 : <c:out value=""></c:out>

 

변수 및 삭제 태그 : <c:set></c:set>, <c:remove var=""/>

 

예외 처리 태그 : <c:catch></c:catch>

 

조건 처리 태그 : <c:if test=""></c:if>, <c:choose></c:choose>, <c:when test=""></c:when>, <c:otherwise></c:otherwise>

 

반복 처리 태그 : <c:forEach></c:forEach> <c:forTokens items="" delims=""></c:forTokens>

 

페이지 처리 태그 : <c:import url=""></c:import> <c:redirect></c:redirect> <c:url></c:url> <c:param name=""></c:param>

 

 

<c:out value="출력값" default="기본값" escapeXml="true 또는 false"></c:out>

<c:out>은 지정된 값을 출력시키는 태그이다

 

<c:set var="변수명" value="설정값" target="객체" property="값" scope="범위"></c:set>

<c:set>은 지정된 변수에 값을 설정하는 태그이다.

var : 값을 저장할 변수 이름

value : 저장할 값

target : 값을 설정할 객체의 프로퍼티

scope : 변수의 유효 범위. 기본 값은 page

 

<c:remove var="변수명" scope="범위"/>

<c:remove>는 설정된 속성을 제거하는 태그이다.

 

<c:catch var="변수명"></c:catch>

<c:catch>는 예외처리를 위한 태그이다. 예외가 발생하면 var에 지정된 예외객체가 할당된다.

 

<c:if test="조건" var="변수명" scope="유효범위"></c:if>

<c:if>는 조건 처리를 할 때 사용되는 태그이다.

test : 조건을 지정

var : 조건 처리한 결과를 저장

 

<c:choose>
	<c:when test="조건"></c:when> 
	<c:otherwise></c:otherwise>
</c:choose>

<c:choose>조건 처리를 할 때 쓰이는 태그이다. <c:choose>태그는 별다른 의미없이 조건문의 시작을 알리는 태그이다. <c:when>태그에서 test 속성으로 조건을 확인하며 조건에 만족하면 <c:when>태그 사이에 있는 내용을 처리한다.

 

<c:forEach items="객체명" begin="시작 인덱스"end="끝 인덱스" step="증감식" 
var="변수명" varStatus="상태변수"></c:forEach>

<c:forEach>는 자바의 for문과 유사하다. 

items : 컬렉션이나 배열 형대의 객체를 지정

begin, end : 원하는 범위만큼 반복문을 수행할 수도 있다.

step : 증감식을 설정할 수 있다.

var : 반복 중일 때 현재 반복하고 있는 값을 기억하는 변수

varStatus : 반복의 상태를 갖게 되는 변수

 

<c:forTokens items="객체명" delims="구분자" begin="시작 인덱스" end="끝 인덱스"
step="증감식" var="변수명" varStatus="상태변수"></c:forTokens>

<c:forTokens>는 자바의 for문과 StringTokenizer 객체를 결합하였다고 볼 수 있다. items에 지정한 값을 delims속성의 구분자로 나눈 후 나눠진 만금 반복을 수행한다.

 

6. JSTL fmt

jstl fmt란 국제화/형식화의 기능을 제공해주는 jstl 라이브러리이다. 

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

 

<fmt:formatDate value="값" type="타입" dateStyle="값" timeStyle="값" 
pattern="패턴" timeZone="값" var="변수" scope="범위"/>

<fmt:formatDate>는 날짜 형식의 패턴을 설정할 때 사용되는 태그이다.

value : 날짜 또는 시간을 입력할 수 있다.

type : 날짜인지, 시간인지 또는 날짜와 시간 둘 다 포함한 타입인지를 지정가능하다.

dateStyle : 날짜의 스타일을 지정할 수 있으나 type속성이 date 또는 both일 때만 적용된다.

timeStyle : 시간의 스타일을 지정할 수 있으나 type속성이 time 또는 both일 때만 적용된다.

timeZone 속성은 날짜와 시간이 표시될 시간이 표시될 시간대를 지정할 수 있다.

 

<fmt:parseDate value="값" type="타입" dateStyle="값" timeStyle="값" 
pattern="패턴" timeZone="값" parseLocale="값" 
var="변수명" scope="범위"></fmt:parseDate>

<fmt:parseDate>는 문자열을 날짜와 시간의 형태로 변환하는 태그이다.

value속성에 입력된 값을 type 속성에 지정된 타입으로 날짜와 시간의 형태로 변환한다. 나머지 속성은 앞에서 설명한 <fmt:formatDate>의 속성과 기능이 같다.