JSP - Ngôn ngữ diễn đạt (EL)

JSP Expression Language (EL) giúp bạn có thể dễ dàng truy cập vào dữ liệu ứng dụng được lưu trữ trong các thành phần JavaBeans. JSP EL cho phép bạn tạo biểu thức cả hai(a) số học và (b)hợp lý. Trong biểu thức JSP EL, bạn có thể sử dụngintegers, floating point numbers, strings, the built-in constants true and false cho các giá trị boolean và null.

Cú pháp đơn giản

Thông thường, khi bạn chỉ định một giá trị thuộc tính trong thẻ JSP, bạn chỉ cần sử dụng một chuỗi. Ví dụ -

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

JSP EL cho phép bạn chỉ định một biểu thức cho bất kỳ giá trị thuộc tính nào trong số này. Một cú pháp đơn giản cho JSP EL như sau:

${expr}

Đây exprchỉ định chính biểu thức. 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 khác nhau của Java Beans và các đối tượng JSP tích hợp sẵn.

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

<jsp:setProperty name = "box" property = "perimeter" 
   value = "${2*box.width+2*box.height}"/>

Khi trình biên dịch JSP thấy ${} trong một thuộc tính, nó tạo ra mã để đánh giá biểu thức và thay thế giá trị của expresson.

Bạn cũng có thể sử dụng các biểu thức JSP EL trong văn bản mẫu cho thẻ. Ví dụ,<jsp:text>chỉ cần chèn nội dung của nó trong phần nội dung của một JSP. Sau<jsp:text> bảng kê khai <h1>Hello JSP!</h1> vào đầu ra JSP -

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

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

<jsp:text>
   Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>

Biểu thức EL có thể sử dụng dấu ngoặc đơn để nhóm các biểu thức con. Ví dụ,${(1 + 2) * 3} equals 9, but ${1 + (2 * 3)} equals 7.

Để hủy kích hoạt đánh giá các biểu thức EL, chúng tôi chỉ định isELIgnored thuộc tính của chỉ thị trang như bên dưới -

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

Các giá trị hợp lệ của thuộc tính này là true và false. Nếu đúng, biểu thức EL sẽ bị bỏ qua khi chúng xuất hiện trong văn bản tĩnh hoặc thuộc tính thẻ. Nếu nó là false, biểu thức EL được đánh giá bởi vùng chứa.

Các 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 Java hỗ trợ. Bảng sau liệt kê các toán tử được sử dụng thường xuyên nhất:

Không. Nhà điều hành & Mô tả
1

.

Truy cập thuộc tính bean hoặc mục nhập Bản đồ

2

[]

Truy cập một mảng hoặc phần tử Danh sách

3

( )

Nhóm một biểu thức con để thay đổi thứ tự đánh giá

4

+

Thêm vào

5

-

Phép trừ hoặc phủ định một giá trị

6

*

Phép nhân

7

/ or div

Sư đoàn

số 8

% or mod

Modulo (phần còn lại)

9

== or eq

Kiểm tra sự bình đẳng

10

!= or ne

Kiểm tra sự bất bình đẳng

11

< or lt

Kiểm tra ít hơn

12

> or gt

Kiểm tra lớn hơn

13

<= or le

Kiểm tra nhỏ hơn hoặc bằng

14

>= or ge

Kiểm tra lớn hơn hoặc bằng

15

&& or and

Kiểm tra AND logic

16

|| or or

Kiểm tra logic HOẶC

17

! or not

Phần bổ sung Boolean một bậc

18

empty

Kiểm tra các giá trị biến trống

Các hàm trong JSP EL

JSP EL cũng cho phép bạn sử dụng các hàm trong các biểu thức. Các chức năng này phải được xác định trong các thư viện thẻ tùy chỉnh. Cách sử dụng hàm có cú pháp sau:

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

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

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

Để sử dụng một chức năng từ bất kỳ thư viện thẻ nào (tiêu chuẩn hoặc tùy chỉnh), bạn phải cài đặt thư viện đó trên máy chủ của mình và phải bao gồm thư viện trong JSP của bạn bằng cách sử dụng <taglib> chỉ thị như được giải thích trong chương JSTL.

Các đối tượng ngầm định của JSP EL

Ngôn ngữ biểu thức JSP hỗ trợ các đối tượng ngầm định sau:

S. không Đối tượng & Mô tả ngầm định
1

pageScope

Các biến có phạm vi từ phạm vi trang

2

requestScope

Các biến có phạm vi từ phạm vi yêu cầu

3

sessionScope

Các biến có phạm vi từ phạm vi phiên

4

applicationScope

Các biến có phạm vi từ phạm vi ứng dụng

5

param

Yêu cầu tham số dưới dạng chuỗi

6

paramValues

Yêu cầu tham số dưới dạng tập hợp các chuỗi

7

header

Tiêu đề yêu cầu HTTP dưới dạng chuỗi

số 8

headerValues

Tiêu đề yêu cầu HTTP dưới dạng tập hợp các chuỗi

9

initParam

Tham số khởi tạo ngữ cảnh

10

cookie

Giá trị cookie

11

pageContext

Đối tượng JSP PageContext cho trang hiện tại

Bạn có thể sử dụng các đối tượng này trong một biểu thức như thể chúng là các biến. Các ví dụ sau sẽ giúp bạn hiểu các khái niệm -

Đối tượng pageContext

Đối tượng pageContext cung cấp cho bạn quyền truy cập vào đối tượng JSP pageContext. Thông qua đối tượng pageContext, bạn có thể truy cập đối tượng yêu cầu. Ví dụ: để truy cập chuỗi truy vấn đến cho một yêu cầu, bạn có thể sử dụng biểu thức sau:

${pageContext.request.queryString}

Các đối tượng phạm vi

Các pageScope, requestScope, sessionScopeapplicationScope các biến cung cấp quyền truy cập vào các biến được lưu trữ ở mỗi cấp phạm vi.

Ví dụ: nếu bạn cần truy cập rõ ràng vào biến hộp trong phạm vi ứng dụng, bạn có thể truy cập nó thông qua biến applicationScope như applicationScope.box.

Đối tượng param và paramValues

Các đối tượng param và paramValues ​​cung cấp cho bạn quyền truy cập vào các giá trị tham số thường có sẵn thông qua request.getParameterrequest.getParameterValues các phương pháp.

Ví dụ: để truy cập một tham số có tên thứ tự, hãy sử dụng biểu thức ${param.order} hoặc là ${param["order"]}.

Sau đây là ví dụ để truy cập thông số yêu cầu có tên tên người dùng -

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

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

header và header Đối tượng giá trị

Các đối tượng header và headerValues ​​cung cấp cho bạn quyền truy cập vào các giá trị tiêu đề thường có sẵn thông qua request.getHeaderrequest.getHeaders các phương pháp.

Ví dụ: để truy cập tiêu đề có tên tác nhân người dùng, hãy sử dụng biểu thức ${header.user-agent} hoặc là ${header["user-agent"]}.

Sau đây là ví dụ để truy cập một tham số tiêu đề có tên là 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>

Đầu ra sẽ giống như sau:

User Agent Example

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 tiêu đề trả về giá trị chuỗi đơn, trong khi đối tượng headerValues ​​trả về mảng chuỗi.