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à. và []. 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, sessionScopevà applicationScope 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.getParameter và request.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.getHeader và request.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.