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>
실행 결과는 다음과 같습니다.
The header 객체는 단일 값을 반환하는 반면 headerValues는 문자열 배열을 반환합니다.