English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JSP 표현식 언어(EL)은 JavaBean에 저장된 데이터에 접근하는 데 매우 간편합니다. JSP EL은 수학 표현식과 논리 표현식을 생성하는 데도 사용할 수 있습니다. JSP EL 표현식 내에서는 정수, 부동소수점 수, 문자열, 상수 true, false, 그리고 null을 사용할 수 있습니다.
일반적으로 JSP 태그에서 속성 값을 지정할 때는 간단히 문자열을 사용하면 됩니다:
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL은 속성 값을 표현하는 표현식을 지정할 수 있습니다. 간단한 표현식 문법은 다음과 같습니다:
${expr}
expr은 표현식을 의미합니다. JSP EL에서 일반적인 연산자는 .과 {}입니다. 이 두 연산자는 내장된 JSP 객체를 통해 다양한 JavaBean 속성에 접근할 수 있도록 합니다.
예를 들어, 위의 <jsp:setProperty> 태그는 다음과 같은 형식으로 표현 언어를 사용하여 변환될 수 있습니다:
<jsp:setProperty name="box" property="perimeter" value="${2*box.width+2*box.height"/>
JSP 컴파일러가 속성에 "${" 형식을 볼 때, 그 표현식을 계산하기 위한 코드를 생성하고, 표현식의 값을 대체하는 대체물을 생성합니다.
또한 태그의 템플릿 텍스트에서 표현식 언어를 사용할 수 있습니다. 예를 들어 <jsp:text> 태그는 간단하게 주체에 있는 텍스트를 JSP 출력에 삽입합니다:
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
이제, <jsp:text> 태그의 주체에 표현식을 사용하면 다음과 같습니다:
<jsp:text> Box Perimeter is: ${2*box.width + 2*box.height} </jsp:text>
EL 표현식에서는 원 단자를 사용하여 부분 표현식을 조직할 수 있습니다. 예를 들어 ${(1 + 2) * 3equals9그러나 ${1 + (2 * 3equals7.
EL 표현식 평가를 중지하려면, page 지시를 사용하여 isELIgnored 속성 값을 true로 설정해야 합니다:
<%@ page isELIgnored="true|false" %>
이렇게 하면 EL 표현식은 무시됩니다. false로 설정하면 컨테이너는 EL 표현식을 계산합니다.
EL 표현식은 Java에서 제공하는 대부분의 수학적과 논리적 연산자를 지원합니다:
연산자 | 설명 |
---|---|
. | Bean 속성이나 맵 항목에 접근 |
[] | 배열이나 연결 리스트의 요소에 접근 |
( ) | 부분 표현식을 조직하여 우선순위를 변경 |
+ | 덧셈 |
- | 뺄셈 또는 음수 |
* | 곱하기 |
/ or div | 나누기 |
% 또는 mod | 나눗셈 |
== 또는 eq | 일치 테스트 |
!= 또는 ne | 불일치 테스트 |
< 또는 lt | 작은 것인지 테스트 |
> 또는 gt | 큰 것인지 테스트 |
<= 또는 le | 작은 것인지 테스트 |
>= 또는 ge | 큰 것인지 테스트 |
&& 또는 and | 논리적 AND 테스트 |
|| 또는 or | 논리적 OR 테스트 |
! 또는 not | 반대 테스트 |
empty | 빈 값이 있는지 테스트 |
JSP EL은 표현式中 함수 사용을 허용합니다. 이 함수는 사용자 정의 태그 라이브러리에서 정의되어야 합니다. 함수 사용 문법은 다음과 같습니다:
${ns:func(param1, param2, ...)
ns는 네임스페이스(namespace)를 의미하며, func은 함수 이름을 의미하며, param1첫 번째 매개변수를 의미합니다, param2두 번째 매개변수를 의미하며, 이와 같이 계속됩니다. 예를 들어, fn:length 함수는 JSTL 라이브러리에서 정의되어 있으며, 문자열의 길이를 가져오는 방법은 다음과 같습니다:
${fn:length("Get my length")}
모든 라벨 라이브러리 함수를 사용하려면, 이 라이브러리를 서버에 설치한 후 JSP 파일에 <taglib> 태그를 사용하여 이 라이브러리를 포함해야 합니다.
JSP EL이 지원하는 암시적 객체는 다음과 같습니다:
암시적 객체 | 설명 |
---|---|
pageScope | page 계층 |
requestScope | request 계층 |
sessionScope | session 계층 |
applicationScope | application 계층 |
param | Request 객체의 파라미터, 문자열 |
paramValues | Request 객체의 파라미터, 문자열 집합 |
header | HTTP 정보 헤더, 문자열 |
headerValues | HTTP 정보 헤더, 문자열 집합 |
initParam | 컨텍스트 초기화 파라미터 |
cookie | 쿠키 값 |
pageContext | 현재 페이지의 pageContext |
이러한 객체는 표현식에서 변수와 같이 사용할 수 있습니다. 다음은 이 개념을 더 잘 이해하기 위한 몇 가지 예제입니다.
pageContext 객체는 JSP에서 pageContext 객체의 참조입니다. pageContext 객체를 통해 request 객체에 접근할 수 있습니다. 예를 들어, request 객체에 전달된 쿼리 문자열에 접근하려면 다음과 같이 합니다:
${pageContext.request.queryString}
pageScope, requestScope, sessionScope, applicationScope 변수는 각 작용域 계층에 저장된 변수에 접근하기 위해 사용됩니다.
예를 들어, applicationScope 계층에 있는 box 변수를 명시적으로 액세스하려면 다음과 같이 액세스할 수 있습니다:applicationScope.box。
param과 paramValues 객체는 파라미터 값을 액세스하기 위해 사용되며, request.getParameter 메서드와 request.getParameterValues 메서드를 사용합니다.
예를 들어, order라는 이름의 파라미터에 접근하려면 다음과 같은 표현식을 사용할 수 있습니다:${param.order} 또는 ${param["order"]}。
다음 예제는 request에서 username 파라미터에 접근하는 방법을 보여줍니다:
<%@ page import="java.io.*,java.util.*" %> <% String title = "Accessing Request Param"; %> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align="center"> <p>${param["username"]}</p> </div> </body> </html>
param 객체는 단일 문자열을 반환하며, paramValues 객체는 문자열 배열을 반환합니다.
header와 headerValues 객체는 request.getHeader 메서드와 request.getHeaders 메서드를 사용하여 정보 헤더에 접근합니다.
예를 들어, user-agent 정보 헤더를 사용하는 방법은 다음과 같습니다: ${header.user-agent} 또는 ${header["user-agent"]}를 접근하는 방법을 보여줍니다.
다음 예제는 user-agent 정보 헤더:
<%@ page import="java.io.*,java.util.*" %> <% String title = "User Agent Example"; %> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align="center"> <p>${header["user-agent"]}</p> </div> </body> </html>
실행 결과는 다음과 같습니다:
header 객체는 단일 값을 반환하며, headerValues는 문자열 배열을 반환합니다.