14/08/2018, 11:06

Expression Language (EL) trong JSP

JSP Epression Language (EL) giúp dễ dàng truy cập dữ liệu ứng dụng được lưu giữ trong các thành phần JavaBeans. JSP EL cho phép bạn tạo các Expression, gồm số học và logic. Bên trong một JSP EL, bạn có thể sử dụng các integer, các số floating point, string, các hằng có sẵn true hoặc false cho ...

JSP Epression Language (EL) giúp dễ dàng truy cập dữ liệu ứng dụng được lưu giữ trong các thành phần JavaBeans. JSP EL cho phép bạn tạo các Expression, gồm số học và logic. Bên trong một JSP EL, bạn có thể sử dụng các integer, các số floating point, string, các hằng có sẵn true hoặc false cho các giá trị Boolean, và null.

Cú pháp đơn giản cho JSP EL

Đặc trưng, khi bạn xác định một giá trị thuộc tính trong một thẻ JSP, một cách đơn giản, bạn sử dụng một string. Ví dụ:

 
<jsp:setProperty name="box" property="perimeter" value="100"/>

JSP EL cho phép bạn xác định một Expression cho bất kỳ giá trị thuộc tính nào. Một cú pháp đơn giản cho JSP EL như sau:

 

Ở đây, expr xác định chính Expression. Các toán tử phổ biến nhất trong JSP EL là .[]. Hai toán tử này cho phép bạn truy cập các thuộc tính đa dạng của JavaBeans và các đối tượng JSP có sẵn.

Ví dụ, cú pháp thẻ <jsp:setProperty> trên có thể được viết với một Expression giống như:

 
<jsp:setProperty name="box" property="perimeter" 
                 value="0"/>

Khi JSP compiler thấy ${} form trong một thuộc tính, nó tạo code để ước lượng expression này và thay thế giá trị của expression đó.

Bạn cũng có thể sử dụng các JSP EL bên trong Template Text cho một thẻ. Ví dụ, thẻ <jsp:text> chèn nội dung của nó bên trong phần thân của một JSP. Khai báo <jsp:text> sau chèn <h1>Hello JSP!</h1> vào trong JSP output:

 
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>

Bạn có thể bao một JSP EL trong phần thân của một thẻ <jsp:text> hoặc bất kỳ thẻ khác) với cùng cú pháp ${} bạn sử dụng cho các thuộc tính. Ví dụ:

 
<jsp:text>
Box Perimeter is: 0
</jsp:text>

EL expression có thể sử dụng các dấu ngoặc đơn để nhóm các subexpression. Ví dụ, 9 bằng 9, nhưng 7 bằng 7.

Để vô hiệu hóa sự ước lượng của các EL expression, chúng ta xác định thuộc tính isELIgnored của page Directive như sau:

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

Các giá trị hợp lệ của thuộc tính này là true hoặc false. Nếu nó là true, EL expression bị bỏ qua khi chúng xuất hiện trong các thuộc tính thẻ hoặc static text. Nếu nó là false, các EL expression được ước lượng bởi Container.

Toán tử cơ bản trong EL

JSP Expression Language (EL) hỗ trợ hầu hết các toán tử số học và logic được hỗ trợ bởi Java. Dưới đây là danh sách các toán tử được sử dụng thường xuyên nhất.

Toán tửMiêu tả
. Truy cập một đặc tính của Bean hoặc Map entry
[]Truy cập một phân tử mảng hoặc List
( )Nhóm một subexpression để thay đổi thứ tự ước lượng
+ Phép cộng
-Phép trừ hoặc phủ định một giá trị
* Phép nhân
/ hoặc divPhép chia
% hoặc modPhép chia lấy phần dư
== hoặc eqKiểm tra có bằng hay không
!= hoặc neKiểm tra tính không bằng
< hoặc lt Kiểm tra tính nhỏ hơn
> hoặc gtKiểm tra tính lớn hơn
<= hoặc le Kiểm tra tính nhỏ hơn hoặc bằng
>= hoặc ge Kiểm tra tính lớn hơn hoặc bằng
&& hoặc and Phép AND logic
|| hoặc orPhép OR logic
! hoặc notPhần bù Boolean một ngôi
empty Kiểm tra các giá trị biến rỗng

Hàm trong JSP EL

JSP EL cũng cho phép bạn sử dụng các hàm trong Expression. Những hàm này phải được định nghĩa trong các thư viện custom tag. Một sự sử dụng hàm có cú pháp sau:

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

Tại đây, ns là không gian tên của hàm đó, func là tên hàm và param1 là giá trị tham số đầu tiên. Ví dụ, hàm fn:length, mà là một phần của thư viện JSTL có thể được sử dụng như sau để nhận độ dài của chuỗi.

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

Để sử dụng một hàm từ bất kỳ thư viện thẻ nào (Standard hoặc Custom), bạn phải cài đặt thư viện đó trên Server và phải bao thư viện đó trong JSP bởi sử dụng <taglib> directive như đã giải thích trong chương JSTL.

Các đối tượng ẩn trong JSP EL

JSP Expression Language hỗ trợ các đối tượng ẩn sau:

Đối tượng ẩnMiêu tả
pageScopeCác biến scope từ phạm vi page
requestScopeCác biến scope từ phạm vi request
sessionScopeCác biến scope từ phạm vi session
applicationScopeCác biến scope từ phạm vi application
paramCác tham số request, dạng các chuỗi
paramValuesCác tham số request, dạng các tập hợp của các chuỗi
headerHTTP request header dạng các chuỗi
headerValuesHTTP request header dạng các tập hợp của các chuỗi
initParamCác tham số khởi tạo context
cookieCác giá trị Cookie
pageContextĐối tượng JSP PageContext cho page hiện tại

Bạn có thể sử dụng các đối tượng này trong một Expression khi nếu chúng là các biến. Dưới đây là một số ví dụ mà giải thích rõ rằng khái niệm trên:

Đối tượng pageContext trong JSP

Thông qua đối tượng pageContext, bạn có thể truy cập tới đối tượng request. Ví dụ, để truy cập chuỗi truy vấn đang đến cho một request, bạn có thể sử dụng Expression:

 

Đối tượng Scope trong JSP

Các biến pageScope, requestScope, sessionScope, và applicationScope cung cấp sự truy cập tới các biến được lưu giữ tại mỗi mức độ scope.

Ví dụ, nếu bạn cần truy cập một cách rõ ràng tới biến box trong phạm vị application, bạn có thể truy cập nó thông qua biến applicationScope dạng applicationScope.box.

Đối tượng param và paramValues trong JSP

Các đối tượng param và paramValues giúp bạn truy cập tới các giá trị tham số một cách thông thường thông qua các phương thức request.getParameterrequest.getParameterValues.

Ví dụ, để truy cập thứ tự các tham số đã đặt tên, sử dụng expression là: hoặc .

Ví dụ sau truy cập một tham số request với tên usename:

 
<%@ 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></p>
</div>
</body>
</html>

Đối tượng param trả về các giá trị chuỗi đơn, trong khi đó đối tượng paramValues trả về các mảng chuỗi.

Đối tượng header và headerValues trong JSP

Đối tượng header và headerValues giúp bạn truy cập tới các giá trị header có sẵn một cách thông thường thông qua các phương thức request.getHeaderrequest.getHeaders.

Ví dụ, để truy cập một header với tên user-agent, sử dụng expression là: 0 hoặc Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36.

Ví dụ sau truy cập một tham số header với tên 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>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36</p>
</div>
</body>
</html>

Nó sẽ cho kết quả giống như:


Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C; InfoPath.2)

Đối tượng header trả về các giá trị chuỗi đơn, trong khi đối tượng headerValues trả về các mảng chuỗi.

0