CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

[Java Web] Expression Language (EL) và Scriptlets JSP

Đăng lúc: 04:21 PM - 29/01/2024 bởi Charles Chung - 790

Trong 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 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 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.getParameterrequest.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 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 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!

QUẢNG CÁO - TIẾP THỊ