2013년 3월 14일 목요일

[JSP] EL(Expression Language)

JSP를 이용하고 코딩을 할 때 불편함이 있는데 그것은 자바코드와 HTML코드, 거기다 스크립트코드가 모두 혼합해서 사용될 때 너무 지저분해 보이는 것이다.

JSP에는 자바코드를 줄이고 데이터를 출력하는데 좀 더 간결한 익스프레션 언어(EL)를 제공한다. 익스프레션 언어는 다음과 같이 사용한다.
예) ${cnt};

JSP의 익스프레션과는 구별해야한다. EL에서는 어트리뷰트 이름을 이용하여 값을 출력한다. 그러므로 setAttribute()와 getAttribute()를 통해 데이터를 저장하고 얻었던 작업을 줄여서 나타낼 수 있다.

예를 들어 request.setAttribute("result", 100) 이라고 request객체에 "result"라는 이름으로 100이라는 데이터를 저장하였다. 그렇다면 이 데이터를 얻기 위해서 request의 getAttribute()메서드를 호출하여 얻어야 하지만 EL에선 ${result}로 데이터를 손쉽게 얻을 수 있다.

JSP의 내장 객체 중 scope의 범위에 따른 네 가지 종류의 객체를 살펴보았다.
page, request, session, application 이 그것이다.
이들 모두 set(), get()메서드를 이용하여 어트리뷰트에 데이터를 저장할 수 있기 때문에 당연히 EL을 통해 데이터의 출력이 가능하다.

그렇다면 이들 네 가지 객체 어떻게 EL구문 만으로 데이터를 읽어 들일 수 있을까?
그 이유는 page -> request -> session -> application 순으로 어트리뷰트를 찾아가기 때문이다.

이런 이유로 좀더 명확한 내장 객체의 어트리뷰트를 표현하기 위하여 다음과 같이 사용하기도 한다.
예) ${pageScope.result}

page내장 객체의 어트리뷰트에 result로 저장되어 있는 데이터를 출력하라는 EL구문이 되겠다.

이 네가지 내장 객체뿐만 아니라 더많은 객체가 존재하여 EL구문을 활용할 수 있다.
pageScope : page 어트리뷰트의 집합
requestScope : request 어트리뷰트의 집합
sessionScope : session 어트리뷰트의 집합
applicationScope : application 어트리뷰트의 집합
param : 웹 브라우저로부터 입력된 데이터의 집합(예 ${param.result})
paramValues : 웹 브라우저로부터 입력된 여러 데이터의 집합(예 ${paramValues.result[0]})
header : HTTP요청 메세지에 있는 HTTP헤더의 집합(사용법은 param과 같다)
headerValues : HTTP요청 메세지에 있는 여러 HTTP헤더의 집합(사용법은 paramValues와 같다)
cookie : 웹 브라우저로부터 전송된 쿠키의 집합(예 cookie.result.value)
initParam : 웹 어플리케이션의 초기화 파라미터의 집합
pageContext : JSP페이지의 환경 정보의 집합

EL은 연산과 비교조건이 가능하다. 일반적인 프로그래밍 문법과 비슷하기 때문에 설명은 생략하기로 하고 Empty 연산자를 알아보자.
${empty result}라고 사용하면 result이름으로 데이터 값이 존재하는지 유무를 확인할 수 있다. 리턴형은 Boolean이다.


댓글 없음:

댓글 쓰기