Chap 15. 표현 언어 ( Expression Language )
* 표현 언어란?
표현 언어( Expression Language ) 는 JSTL ( JSP Standard Tag Library ) 1.0 규약에 소개된 내용.
JSP 2.0 부터 사용 가능하다.
-
표현 언어의 기본 문법
${variable}
" " 안에서도 사용될 수 있다.
<jsp:include page="/module/${member.id}/header.jsp" flush="false" />
표현 언어는 JSP 의 스크립트 요소 ( 스크립트릿, 표현식, 선언부 ) 를 제외한 나머지 부분에서 사용될 수 있다.
JSP 2.1 부터는 아래와 같은 형식의 EL 도 지원된다.
#{variable}
저 둘의 가장 큰 차이는 실제로 EL 의 값을 언제 생성하느냐에 있다.
${variable} 은 interpreter 가 해당 구문을 맞딱뜨렸을 때 바로 값을 계산한다.
반대로 #{variable} 은 실제 값이 사용될 때 값이 계산된다.
* 표현 언어의 기본 객체
pageContext : JSP 의 page 기본 객체.
pageScope : pageContext 의 Map 객체
requestScope : request 의 Map 객체
sessionScope : session 의 Map 객체
applicationScope : application 의 Map 객체
param : 요청 파라미터의 매핑을 저장한 Map 객체. String 값. request.getParameter(이름) 의 결과와 동일
paramValues : 요청 파라미터의 매핑을 저장한 Map 객체. String[] 값. request.getParameterValues(이름) 의 결과와 동일
header : 요청 헤더를 저장한 Map 객체. String 값.
headerValues : 요청 헤더를 저장한 Map 객체. String[] 값.
cookie : cookie 를 저장한 Map 객체
initParam : 초기화 파라미터의 매핑을 저장한 Map 객체.
cf) EL 에서는 객체의 값에 접근할 때 자바빈 객체의 프로퍼티를 사용한다.
* 표현 언어의 기본
-
객체의 탐색.
EL variable 값은 page, request, session, application 영역을 차례대로 검사해서 해당 variable 이 있는지 확인하여 사용한다.
-
수치 연산자
숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환한 후 연산자를 수행한다.
숫자로 변환할 수 없는 객체와 수치 연산자를 함께 사용하면 에러를 발생시킨다.
null 객체는 0으로 처리된다.
EL 의 연산 결과는 소숫점이 있다면 Double 타입으로 변환된다.
-
비교 연산자
문자열을 비교할 경우에는 String.compareTo() 메서드를 사용한다.
-
empty 연산자
empty <값>
null 이면 true.
"" 이면 true.
길이가 0인 배열이면 true
빈 Map 이면 true.
빈 Collection 이면 true
이외의 경우는 false.
-
특수 문자 처리하기.
\${expr}
\#{expr}
* 표현 언어에서 객체의 메서드 호출
JSP 2.2 버전에서부터 객체의 메서드를 직접 호출할 수 있다.
static method 는 다른 방식으로 해야 한다.
* 표현 언어에서 클래스 정적 메서드 호출하기.
JSP 2.0 버전부터 사용 가능하다.
-
함수를 정의한 TLD 파일 작성
<!-- WEB-INF/tlds/el-functions.tld -->
<?xml version="1.0" encoding="euc-kr"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>EL에서 함수실행</description>
<tlib-version>1.0</tlib-version>
<short-name>ELfunctions</short-name>
<function>
<description>Static Method Call Test</description>
<name>test</name>
<function-class>test.StaticMethodTest</function-class>
<function-signature>
java.lang.String myTest( java.lang.String )
</function-signature>
</function>
</taglib>
name 을 test 라고 주었다. 실제 static function 이름은 myTest 이다.
<!-- WEB-INF/web.xml -->
<web-app ...>
<jsp-config>
<taglib>
<taglib-uri>
/WEB-INF/tlds/el-functions.tld
</taglib-uri>
<taglib-location>
/WEB-INF/tlds/el-functions.tld
</taglib-location>
</taglib>
</jsp-config>
</web-app>
taglib-uri 는 JSP 에서 TLD 태그 라이브러리를 참조할 때 사용하는 식별자
-
EL 에서 함수 사용하기.
...
<%@ taglib prefix="elfunc" uri="/WEB-INF/tlds/el-functions.ltf" %>
...
${elfunc:test( "감자" ) }
...
* 표현 언어 비활성화 방법
EL 언어가 지원되기 전에 작성된 코드를 EL 언어가 지원되는 container 등으로 이전했을 경우 문제가 될 수 있기에 비활성화 방법을 알아두는 것도 나쁘지 않다.
EL 을 비활성화시키는 방법은 크게 3가지 가 있다
1. web.xml 파일에 비활성화 옵션 지정하기
2. JSP 페이지에 비활성화 옵션 지정하기.
3. web.xml 파일을 서블릿 2.3 또는 2.4 버전에 맞게 ㅈ가성하기.
-
web.xml 파일에 EL 비활성화 옵션 추가하기
<web-app ...>
<jsp-config>
...
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
<deferred-syntax-allowed-as-literal>true</deferred-syntax-allowed-as-literal>
</jsp-property-group>
</jsp-config>
</web-app>
-
web.xml 파일의 버전에 따른 EL 처리.
서블릿 2.3 버전의 web.xml 파일은 XML 스키마가 아닌 DTD 를 이용해서 web.xml 파일의 구조를 정의하고 있다.
DTD 를 사용하는 경우 JSP 는 1.2 버전이고 이는 EL 을 지원하지 않으므로 JSP 에 포함된 EL 이 처리되지 않는다.
DTD : Document Type Definition.
<!DOCTYPE ...> 으로 정의
서블릿 2.4 버전의 경우에는 XML 스키마를 사용하며, XML 네임스페이스를 사용한다.
이 때 name space 에 서블릿 버전을 2.4 ( JSP 2.0 ) 을 지정하면 ( web-app_2_4.xsd ) ${ } 형태의 EL 만 지원하고,
버전을 그 이상으로 하면 #{ } EL 까지 모두 지원한다.
'프로그래밍 놀이터 > Web' 카테고리의 다른 글
millisecond to date / date to millisecond converter (0) | 2015.02.05 |
---|---|
Chap 16. 표준 태그 라이브러리 ( JSTL ) (0) | 2015.01.22 |
Chap 13. 웹 어플리케이션의 일반적인 구성 및 방명록 구현 (0) | 2015.01.20 |
Chap 12. 데이터베이스 프로그래밍 기초 (0) | 2015.01.18 |
Chap 11. <jsp:useBean> 액션 태그를 이용한 객체 사용 (0) | 2015.01.17 |
댓글