본문 바로가기

Spring

EL 및 JSTL 정리

EL(Expression Language) + JSTL(Java Standard Tag Library) 정리


처음에 EL과 JSTL을 혼용했다. 

EL이 좀 더 큰 개념이고 JSTL은 좀 더 작은 개념으로 생각했기 때문이다. 

글을 정리 하다 보니 EL은 화면 출력을 위한 도구이고 JSTL은 제어문이 맞겠다.


Servlet SpecJSP SpecEL SpecWebSocket SpecJASPIC SpecApache Tomcat versionActual release revisionSupported Java Versions
4.0TBD (2.4?)TBD (3.1?)TBD (1.2?)1.19.0.x9.0.0.M9 (alpha)8 and later
3.12.33.01.11.18.5.x8.5.47 and later
3.12.33.01.1N/A8.0.x (superseded)8.0.35 (superseded)7 and later
3.02.22.21.1N/A7.0.x7.0.706 and later
(7 and later for WebSocket)
2.52.12.1N/AN/A6.0.x6.0.455 and later
2.42.0N/AN/AN/A5.5.x (archived)5.5.36 (archived)1.4 and later
2.31.2N/AN/AN/A4.1.x (archived)4.1.40 (archived)1.3 and later
2.21.1N/AN/AN/A3.3.x (archived)3.3.2 (archived)1.1 and later


먼저 들어가기 전에 EL 최소 Spec을 살펴보자. Tomcat 6, Servlet 2.5, Java 5버전이 최소 Spec이 되겠다.  



---------------------------------------------------------------------------------------------

참고 url : http://neoguru.tistory.com/12

WAS 버전은 지원하는데 Servlet 버전이 낮은 경우는 Jsp에서 isELIgnored="false" 옵션을 주면 된다는 내용이 있음.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"isELIgnored="false" %>

---------------------------------------------------------------------------------------------


참고 Url : http://uniksy1106.tistory.com/179

web.xml을 이용한 EL 비활성화 하는 방법이 나와 있다.

그리고, web.xml에 표기된 servlet 버전에 따라 EL의 지원이 갈린다는 내용이 있다.

---------------------------------------------------------------------------------------------


JSP로 게시판 리스트를 작성하는 간단한 코드를 한번 보자. 

<table>

<tr>

<td>제목</td>

<td>글쓴이</td>

<td>작성일</td>

</tr>

<% for ( int i =0; i < list.length; i++) { %>

<tr>

<td><%=list[i].["title"]%></td>

<td><%=list[i].["writer"]%></td>

<td><%=list[i].["regdate"]%></td>

</tr>


<%} %>

</table>

EL은 <%= %> 구문을 대신 한거고(화면에 값을 출력한 것이다.)

JSTL은 <% %> 구문을 대신 한 것이다. (루핑을 돌리는 제어문이다)


그렇다면 EL과 JSTL의 정리를 아래와 같이 하기로 했다.


EL

- EL은 어떻게 표현하는가? 

- EL의 scope 순서는 어떻게 되는가?


JSTL

- JSTL의 제어문에는 어떠한 종류가 있는가?



EL은 어떻게 표현하는가?

- ${} 로 표현한다.

- 위에 <%= list[i].["title"] %>를 EL로 표기하면 ${list.title} 으로 표현 할 수 있겠다.


EL의 Scope 순서는 어떻게 되는가?

뜬금 없이 Scope(영역)라는 단어가 나왔는데 데이터에는 어떤 데이터가 있을까? 일반적으로는 위에 게시판 리스트를 출력하는 page 단위의 데이터만 생각해서 그렇다. 좀 더 범위를 넓혀보면 form에서 데이터가 넘어온 값 request, 로그인해서 담아 놓은 session 값, 더 크게는 Application의 값 까지도 포함이 된다. 


만약 page, request, session, application에 모두 동일한 이름의 attribute가 있다면 어떤 값을 가져올까? 이게 EL의 scope(영역)의 의미이다.


결과적으로는 page에서 해당 attribute를 찾고 없으면 request를 찾고 또 없으면 session , Application에서 찾는다. 작은 개념에서 큰 개념으로 데이터를 찾게 된다.



내장객체

1) pageScope : 페이지Scope에 접근

2) request Scope : 리퀘스트Scope에 접근

3) sessionScope : 세션Scope에 접근

4) applicationScope : 어플리케이션Scope에 접근

5) param : 파라미터값 얻어올때 ( 1개의 Key에 1개의 Value )

6) paramValues : 파라미터값 배열로 얻어올때( 1개의 Key에 여러개의 Value) 

7) header : 헤더값 얻어올때 ( 1개의 Key에 1개의 Value ) 

8) headerValues : 헤더값 배열로 얻어올때 ( 1개의 Key에 여러개의 Value ) 

9) cookie : ${cookie. key값. value값}으로 쿠키값 조회

10) initParam : 초기 파라미터 조회

11) pageContext : 페이지컨텍스트 객체를 참조할때

 

JSTL

JSTL을 사용하기 위해서는 tag library를 선언해야 한다.

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