JSTL_EL

강의노트/웹 2013. 7. 9. 14:32


표현언어 EL (Expression Language)

EL은 다양한 위치에 있는 데이터에 접근하기 위한 언어이다. 문법체계가 직관적으로 아주 쉽다. jsp 에서는 모든 변수의 생성과 선언을 반드시 표시를 해주어야 되지만 EL은 그 과정 없이 바로 접근이 가능하다.

 

1. EL 표시형식

EL임을 표시하는 형식은 ${} 이다. 이 안에 들어있는 것은 EL 로 처리된다. 내장객체의 접근이 가능하고, 산술연산과 비교연산이 가능하다.

자바스크립트와 비슷한 방법으로 객체 내부의 자원에 접근이 가능하다. dot(.) bracket([]) 모두를 이용해서 접근할 수 있으며, 예를 들면

${header.cookie} ${header['cookie']} 는 같은 결과 값을 얻을 수 있다. 만일 user-agent 처럼 - 와 같이 있을 경우는 ${header['user-agent']} 로 접근하는 것이 좋다.

[] 를 이용해서 객체에 접근할 경우에 index 를 대신해서 사용할 수도 있다.

다음 예제는 이전 내용을 요약한 것이다.

예제 1.   jstlel01.jsp

<% response.setContentType("text/html;"); %>

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

<h3>header</h3>

<c:forEach items="${header}" var="h">

  <c:out value="${h}"/><br/>

</c:forEach>

<h3>header.cookie</h3>

<c:out value="${header.cookie}"/><br/>

<c:out value='${header["cookie"]}'/>

 

header 라는 객체가 갖고 있는 값들을 불러서 보여주는 소스이다. request.getHeader() 로 가져올 수 있는 것인데, 훨씬 깔끔한 소스로 보여진다.

JSTL 태그에서 기본적으로 EL을 사용한다. var 속성은 변수를 지정하는데, 여기에는 문자열 상수로 지정되며, 이 후에 이 변수를 참조하기 위해서는 EL 을 사용한다.

 

2. EL 내장객체

EL 로 접근할 수 있는 내장 객체들은 다음과 같다.

pageScope

page scope 의 변수들

requestScope

request scope 의 변수들

sessionScope

session scope 의 변수들

applicationScope

application scope 의 변수들

param

parameter 변수들 문자열

paramValues

parameter 변수들 문자열 배열

header

HTTP request 헤더

headerValues

HTTP request 헤더 문자열 배열

initParam

컨텍스트 초기 변수 web.xml 에서 지정

cookie

쿠키 변수들

pageContext

현재 페이지의 pageContext 객체

 

pageScope 의 변수는 스크립틀릿의 변수와는 틀리며, 이를 이용하려면 조금은 번잡한 과정을 거치게 된다. 따라서 가능하면 스크립틀릿은 사용하지 않기를 권장한다. 이를 활용하는 소스이다.

예제 2.   jstlel02.jsp

<% response.setContentType("text/html;"); %>

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

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

<% String[] abc = {"빨강","파랑","노랑"}; %>

 

<c:set var="t" value="hello"/>

<c:set var="color" value="${abc}"/>

 

<h3>pageScope</h3>

<c:forEach items="${pageScope}" var="h">

    <c:out value="${h}"/><br/>

</c:forEach>

 

<h3>colors</h3>

<c:forEach items="${color}" varStatus="i">

    <c:out value="${i.count}"/>.

    <c:out value="${color[i.index]}"/><br/>

</c:forEach>

 

 

<c:forEach/> 를 통해서 pageScope 의 값을 모두 출력해보면, String 배열변수인 abc 는 접근할 수 없게 되어있다. <c:set/> <c_rt:set/> 으로 정해놓은 t color 만 나타나는 것이 보인다.

color 의 값을 출력하는 코드를 보면 color 의 인덱스를 이용해 배열 내용을 뽑아 왔다. varStatus 대신 var 변수를 통해서 바로 내용을 출력할 수도 있다.

 

value 가 들어가는 자리에 표현식을 쓰기 위해서는 RT 기반의 태그를 사용해야 된다. 만일 <c_rt:set var="color" value="<%=abc%>"/> 에서 <c_rt:set/> 대신 <c:set/> 를 사용하면 color 가 갖게 되는 값은 "<%=abc%>" 문자열이 되어버린다.

 

3. EL 연산자

null 인지 아닌지 판단하기 위해서는 empty 라는 키워드를 사용한다. 세션 값이 없으면 세션에 값을 저장하고, 있을 경우 하나를 더한 후에 출력하는 코드이다

예제 3.   jstlel03.jsp

<% response.setContentType("text/html;"); %>

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

<c:if test="${!empty hit}">

    <c:set var="hit" value="${hit+1}" scope="session"/>

    <c:out value="${hit}"/> 번 리로드되었습니다.

</c:if>

<c:if test="${empty hit}">

    <c:set var="hit" value="1" scope="session"/>

    세션에 값을 저장했습니다.

</c:if>

<%

    String temp = request.getParameter(“hit”);

    If(temp != null) out.writer(Integer.parseInt(temp) + 1);

    Else {temp = 1; session.setAttribute(“hit”,temp);

%>

<br>

<a href="jstlel03.jsp">reload</a>

 

 

EL 의 장점은 객체의 접근이 쉽다고 했다. ${empty 객체} 를 통해서, 객체의 null 을 확인할 수 있다. ${!empty hit} ${!empty sessionScope.hit} 로 대치해도 같은 결과가 나온다.

EL 의 연산자는 관계연산자, 산술연산자, 논리연산자, empty 연산자가 있고 다음 표와 같다.

연산자 구분

연산자

관계

< lt > gt <= le >= ge == eq != ne

산술

+ - * / div % mod

논리

&& and || or ! not

Empty

empty

 

연산자들간의 우선순위는 다음과 같다.

1. [] .

2. ()

3. - (단항) not ! empty

4. * / div % mod

5. + - (이항)

6. < > <= >= lt gt le ge

7. == != eq ne

8. && and

9. || or

'강의노트 > ' 카테고리의 다른 글

JSTL 국제화 지역화 태그  (0) 2013.07.10
JSTL core  (0) 2013.07.10
JSTL(JSP Standard Tag Library)  (0) 2013.07.09
DTO와 DAO 패턴  (0) 2013.06.14
로그인하기  (0) 2013.06.05