English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JSP 표현식 언어

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의 기본 연산자

EL 표현식은 Java에서 제공하는 대부분의 수학적과 논리적 연산자를 지원합니다:

연산자설명
. Bean 속성이나 맵 항목에 접근
[] 배열이나 연결 리스트의 요소에 접근
( ) 부분 표현식을 조직하여 우선순위를 변경
+ 덧셈
- 뺄셈 또는 음수
* 곱하기
/ or div 나누기
% 또는 mod 나눗셈
== 또는 eq 일치 테스트
!= 또는 ne 불일치 테스트
< 또는 lt 작은 것인지 테스트
> 또는 gt 큰 것인지 테스트
<= 또는 le 작은 것인지 테스트
>= 또는 ge 큰 것인지 테스트
&& 또는 and 논리적 AND 테스트
|| 또는 or 논리적 OR 테스트
! 또는 not 반대 테스트
empty 빈 값이 있는지 테스트

JSP EL의 함수

JSP EL은 표현式中 함수 사용을 허용합니다. 이 함수는 사용자 정의 태그 라이브러리에서 정의되어야 합니다. 함수 사용 문법은 다음과 같습니다:

${ns:func(param1, param2, ...)

ns는 네임스페이스(namespace)를 의미하며, func은 함수 이름을 의미하며, param1첫 번째 매개변수를 의미합니다, param2두 번째 매개변수를 의미하며, 이와 같이 계속됩니다. 예를 들어, fn:length 함수는 JSTL 라이브러리에서 정의되어 있으며, 문자열의 길이를 가져오는 방법은 다음과 같습니다:

${fn:length("Get my length")}

모든 라벨 라이브러리 함수를 사용하려면, 이 라이브러리를 서버에 설치한 후 JSP 파일에 <taglib> 태그를 사용하여 이 라이브러리를 포함해야 합니다.

JSP EL 암시적 객체

JSP EL이 지원하는 암시적 객체는 다음과 같습니다:

암시적 객체설명
pageScope page 계층
requestScope request 계층
sessionScope session 계층
applicationScope application 계층
param Request 객체의 파라미터, 문자열
paramValues Request 객체의 파라미터, 문자열 집합
header HTTP 정보 헤더, 문자열
headerValues HTTP 정보 헤더, 문자열 집합
initParam 컨텍스트 초기화 파라미터
cookie 쿠키 값
pageContext 현재 페이지의 pageContext

이러한 객체는 표현식에서 변수와 같이 사용할 수 있습니다. 다음은 이 개념을 더 잘 이해하기 위한 몇 가지 예제입니다.

pageContext 객체

pageContext 객체는 JSP에서 pageContext 객체의 참조입니다. pageContext 객체를 통해 request 객체에 접근할 수 있습니다. 예를 들어, request 객체에 전달된 쿼리 문자열에 접근하려면 다음과 같이 합니다:

${pageContext.request.queryString}

Scope 객체

pageScope, requestScope, sessionScope, applicationScope 변수는 각 작용域 계층에 저장된 변수에 접근하기 위해 사용됩니다.

예를 들어, applicationScope 계층에 있는 box 변수를 명시적으로 액세스하려면 다음과 같이 액세스할 수 있습니다:applicationScope.box。

param과 paramValues 객체

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 객체

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는 문자열 배열을 반환합니다.