JSP 표현 언어


JSP EL(Expression Language)을 사용하면 JavaBeans에 저장된 데이터에 매우 간단하게 액세스할 수 있습니다. JSP EL은 산술식과 논리식을 모두 생성하는 데 사용할 수 있습니다. 정수, 부동 소수점 숫자, 문자열, 상수 true, false 및 null을 JSP EL 표현식에 사용할 수 있습니다.


간단한 구문

일반적으로 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) * 3}은 9와 같지만 ${1 + (2 * 3)}는 7과 같습니다.

EL 표현식의 평가를 비활성화하려면 페이지 지시어를 사용하여 isELIgnored 속성 값을 true로 설정해야 합니다.

<%@ page isELIgnored ="true|false" %>

이렇게 하면 EL 표현식이 무시됩니다. . false로 설정하면 컨테이너는 EL 표현식을 평가합니다.


EL

EL 표현식의 기본 연산자는 Java에서 제공하는 대부분의 산술 및 논리 연산자를 지원합니다.

보다 크거나 같은지 테스트합니다.
연산자설명
.               Bean 속성 또는 매핑 항목에 액세스
                      []               배열 또는 연결 목록의 요소에 액세스
( )               우선 순위를 변경하기 위한 하위 표현식 구조화
                  +               추가
-                 빼기 또는 음수
                      *               곱하기
/ 또는 div                 제외
% 또는 모드                 모듈로
                  == 또는 eq                 동등성 테스트
!= 또는 ne                 같지 않은지 테스트
                    < 또는 lt              
보다 작은지 테스트합니다. > 또는 gt
보다 큰지 테스트합니다. <= 또는 르                
보다 작거나 같은지 테스트합니다. >= 또는 ge              
                && 또는 및               논리 테스트 및
|| 또는 또는               테스트 로직 또는
                    ! 아니면                 부정 테스트
비어 있음                 null 값 테스트

JSP EL의 함수

JSP EL을 사용하면 표현식에서 함수를 사용할 수 있습니다. 이러한 함수는 사용자 정의 태그 라이브러리에 정의되어야 합니다. 함수를 사용하는 구문은 다음과 같습니다.

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

ns는 네임스페이스를 참조하고, func는 함수 이름을 참조하고, param1은 첫 번째 매개변수를 참조하고, param2는 두 번째 매개변수를 참조하는 식입니다. 예를 들어 JSTL 라이브러리에 정의된 fn:length 함수는 다음과 같이 문자열 길이를 가져오는 데 사용할 수 있습니다.

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

태그 라이브러리에서 함수를 사용하려면 다음을 수행해야 합니다. 서버에 이러한 라이브러리를 설치한 다음 <taglib> 태그를 사용하여 JSP 파일에 해당 라이브러리를 포함시킵니다.


JSP EL 암시적 객체

JSP EL은 다음 표에 나열된 암시적 객체를 지원합니다.

隐含对象描述
                    pageScope                    page 作用域
                    requestScope                    request 作用域
                    sessionScope                    session 作用域
                    applicationScope                    application 作用域
                    param                    Request 对象的参数,字符串
                    paramValues                    Request对象的参数,字符串集合
                    header                    HTTP 信息头,字符串
                    headerValues                    HTTP 信息头,字符串集合
                    initParam                    上下文初始化参数
                    cookie                    Cookie值
                    pageContext                    当前页面的pageContext

이러한 개체를 변수처럼 표현식에 사용할 수 있습니다. 다음으로 이 개념을 더 잘 이해하기 위해 몇 가지 예를 제시하겠습니다.


pageContext 객체

pageContext 객체는 JSP의 pageContext 객체에 대한 참조입니다. pageContext 객체를 통해 요청 객체에 액세스할 수 있습니다. 예를 들어 다음과 같이 요청 개체에 전달된 쿼리 문자열에 액세스합니다.

${pageContext.request.queryString}

범위 개체

pageScope, requestScope, sessionScope 및 applicationScope 변수는 각 범위 수준에 저장된 변수에 액세스하는 데 사용됩니다.

예를 들어 applicationScope 레이어의 box 변수에 명시적으로 액세스해야 하는 경우 applicationScope.box와 같이 액세스할 수 있습니다.


param 및 paramValues ​​​​객체

param 및 paramValues ​​​​객체는 request.getParameter 메서드와 request.getParameterValues ​​​​메서드를 사용하여 매개변수 값에 액세스하는 데 사용됩니다.

예를 들어 order라는 매개변수에 액세스하려면 ${param.order} 또는 ${param["order"]} 표현식을 사용할 수 있습니다.

다음 예에서는 요청의 사용자 이름 매개변수에 액세스하는 방법을 보여줍니다.

<%@ 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"]} 표현식을 사용할 수 있습니다.

다음 예는 사용자 에이전트 정보 헤더에 액세스하는 방법을 보여줍니다.

<%@ 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>

실행 결과는 다음과 같습니다.

jsp-expression-language.jpg

The header 객체는 단일 값을 반환하는 반면 headerValues는 문자열 배열을 반환합니다.