[Java Web] Expression Language (EL) và Scriptlets JSP
Đăng lúc: 04:21 PM - 29/01/2024 bởi Charles Chung - 790Trong bài này chúng ta sẽ tìm hiểu về JSP Expression Language (EL) và Scriptlets JSP
JSP Expression Language (EL) là gì?
JSP EL giúp dễ dàng truy cập 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 cả các biểu thức số học và logic. Trong biểu thức JSP EL, bạn có thể sử dụng số nguyên, số dấu phẩy động, chuỗi, các hằng số true và false có sẵn 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. Cú pháp đơn giản cho JSP EL như sau:
${expr}
Trong đó expr chỉ định chính biểu thức. Các toán tử phổ biến nhất trong JSP EL là dấu . 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 Bean và các đối tượng JSP tích hợp.
Ví dụ: cú pháp trên thẻ <jsp:setProperty> có thể được viết EL như:
<jsp:setProperty name = "box" property = "perimeter" value = "${2*box.width+2*box.height}"/>
Khi trình biên dịch JSP nhìn thấy dạng ${} trong một thuộc tính, nó sẽ tạo 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ụ: thẻ <jsp:text> chỉ cần chèn nội dung của nó vào trong phần thân của JSP. Khai báo <jsp:text> sau đây chèn <h1>Xin chào JSP!</h1> vào đầu ra JSP.
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
Bây giờ bạn có thể đưa một biểu thức JSP EL vào phần nội dung của thẻ <jsp:text> (hoặc bất kỳ thẻ nào khác) với cùng cú pháp ${} mà 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>
Để hủy kích hoạt việc đánh giá các biểu thức EL, chúng tôi chỉ định thuộc tính isELIgnored của chỉ thị trang như bên dưới
<%@ page isELIgnored = "true|false" %>
Các toán tử cơ bản trong EL
Ngôn ngữ biểu thức JSP (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
S.No. | Operator & Description |
---|---|
1 |
. Access a bean property or Map entry |
2 |
[] Access an array or List element |
3 |
( ) Group a subexpression to change the evaluation order |
4 |
+ Addition |
5 |
- Subtraction or negation of a value |
6 |
* Multiplication |
7 |
/ or div Division |
8 |
% or mod Modulo (remainder) |
9 |
== or eq Test for equality |
10 |
!= or ne Test for inequality |
11 |
< or lt Test for less than |
12 |
> or gt Test for greater than |
13 |
<= or le Test for less than or equal |
14 |
>= or ge Test for greater than or equal |
15 |
&& or and Test for logical AND |
16 |
|| or or Test for logical OR |
17 |
! or not Unary Boolean complement |
18 |
empty Test for empty variable values |
JSP EL Implicit Objects
Ngôn ngữ biểu thức JSP hỗ trợ các đối tượng ẩn sau
S.No | Implicit object & Description |
---|---|
1 |
pageScope Scoped variables from page scope |
2 |
requestScope Scoped variables from request scope |
3 |
sessionScope Scoped variables from session scope |
4 |
applicationScope Scoped variables from application scope |
5 |
param Request parameters as strings |
6 |
paramValues Request parameters as collections of strings |
7 |
header HTTP request headers as strings |
8 |
headerValues HTTP request headers as collections of strings |
9 |
initParam Context-initialization parameters |
10 |
cookie Cookie values |
11 |
pageContext The JSP PageContext object for the current page |
Bạn có thể sử dụng các đối tượng này trong một biểu thức giống như chúng là các biến. Các ví dụ sau đây sẽ giúp bạn hiểu các khái niệm
Đối tượng pageContext
Đối tượng pageContext cho phép bạn truy cập vào đối tượng pageContext JSP. 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}
Đối tượng Scope
Các biến pageScope, requestScope, sessionScope và applicationScope 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 box trong phạm vi ứng dụng, bạn có thể truy cập nó thông qua biến applicationScope dưới dạng 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 các phương thức request.getParameter và request.getParameterValues. Ví dụ: để truy cập một tham số có tên order, hãy sử dụng biểu thức ${param.order} hoặc ${param["order"]}.
Đối tượng header và headerValues
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 các phương thức request.getHeader và request.getHeaders. Ví dụ: để truy cập header có tên user-agent, hãy sử dụng biểu thức ${header.user-agent} hoặc ${header["user-agent"]}
JSP Scriptlets là gì?
Một JSP Scriptlets được dùng để chứa bất kỳ đoạn mã nào hợp lệ cho script language được sử dụng trong một trang. Cú pháp của một scriptlet như sau:
<% scripting-language-statements %>
Khi scriplets language được thiết lập là java, scriptlets sẽ được chuyển đổi thành đoạn câu lệnh ngôn ngữ lập trình Java và được chèn vào phương thức service của servlet của trang JSP. Một biến ngôn ngữ lập trình được tạo trong một tập lệnh có thể truy cập được từ bất kỳ đâu trong trang JSP.
Hãy xem ví dụ sau, trang hello.jsp chứa một tập lệnh nhỏ để truy xuất tham số request có tên là username và kiểm tra xem nó có trống hay không. Nếu câu lệnh if là đúng thì trang response.jsp sẽ được đưa vào. Vì câu lệnh if mở một khối nên HTML sẽ được theo sau bởi scriptlets để đóng khối đó.
<% String username = request.getParameter("username"); if ( username != null && username.length() > 0 ) { %> <%@include file="response.jsp" %> <% } %>
Trong trường hợp scriptlets là một lệnh chuyển đổi giá trị biến hoặc biểu thức thành chuỗi thì chúng ta có thể sử dụng cú pháp sau:
<%= scripting-language-expression %>
Lưu ý rằng dấu chấm phẩy không được phép trong biểu thức JSP, ngay cả khi biểu thức tương tự có dấu chấm phẩy khi bạn sử dụng nó trong scriptlet.
Trong ví dụ trước chúng ta có thể nhận thông báo lỗi và in ra như sau:
<% String resp = null; try { Hello hello = new HelloService().getHelloPort(); resp = hello.sayHello(request.getParameter("username")); } catch (Exception ex) { resp = ex.toString(); } %>
Sau đó, một biểu thức scriptlets sẽ được sử dụng để chèn giá trị của resp vào luồng đầu ra:
<h2><font color="black"><%= resp %>!</font></h2>
thay lời cảm ơn!
Các bài cũ hơn
- [Java Web] Request và Response dữ liệu trong JSP Servlet (08:10 AM - 29/01/2024)
- [Java Web] Tạo ứng dụng Web JSP và Servlet với Maven trong Eclipse (08:09 AM - 26/01/2024)
- Hướng dẫn add Tomcat 9 Web Server vào Eclipse (08:58 AM - 25/01/2024)
- Top 5 công cụ AI hữu ích cho lập trình viên (09:54 AM - 24/01/2024)
- Detection edges của ảnh sử dụng OpenCV-Python (04:50 PM - 05/01/2024)