Cú pháp trong JSP

Chương này trình bày về cú pháp đơn giản (ví dụ: các phần tử) liên quan tới lập trình JSP.

Scriptlet trong JSP

Scriptlet có thể chứa bất kỳ số lượng lệnh, biến, khai báo phương thức hoặc Expression của ngôn ngữ Java nào mà là hợp lệ trong ngôn ngữ Scripting.

Sau đây là cú pháp của Scriptlet trong JSP:

<% code fragment %>

Bạn có thể viết XML tương đương với cú pháp trên như sau:

<jsp:scriptlet>
   code fragment
</jsp:scriptlet>

Bất kỳ text, thẻ HTML, hoặc phần tử JSP nào bạn viết phải ở bên ngoài Scriptlet đó. Sau đây là ví dụ đơn giản cho JSP:

<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>
<%
out.println("Your IP address is " + request.getRemoteAddr());
%>
</body>
</html>

Ghi chú: Giả sử rằng Apache Tomcat được cài đặt trong C:\apache-tomcat-7.0.2 và môi trường của bạn được cài đặt theo hướng dẫn.

Bạn giữ code trên trong JSP file là hello.jsp và đặt file này bên trong thư mục C:\apache-tomcat-7.0.2\webapps\ROOT và thử nó bằng việc cung cấp địa chỉ URL là http://localhost:8080/hello.jsp.

Nó sẽ cho kết quả sau:

Cú pháp trong JSP 1

Declarations trong JSP

Một Declaration khai báo một hoặc nhiều biến hoặc phương thức mà bạn có thể sử dụng trong Java code và sau đó trong Java file. Bạn phải khai báo biến hoặc phương thức trước khi bạn sử dụng nó trong JSP file.

Sau đây là cú pháp của JSP Declaration:

<%! declaration; [ declaration; ]+ ... %>

Bạn có thể viết XML tương đương với cú pháp trên như sau:

<jsp:declaration>
   code fragment
</jsp:declaration>

Dưới đây là ví dụ đơn giản cho JSP Declaration:

<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %> 

Expression trong JSP

Một phần tử Expression trong JSP chứa một biểu thức ngôn ngữ Scripting mà được tính toán, được biến đổi thành một String, và được chèn tại nơi Expression đó xuất hiện trong JSP file.

Bởi vì giá trị của một Expression được biến đổi thành một String, bạn có thể sử dụng một Expression bên trong một dòng text, có hoặc không nó được tag với HTML, trong một JSP file.

Phần tử Expression có thể chứa bất kỳ expression nào mà là hợp lệ với Java Language Specification, nhưng bạn không thể sử dụng một dấu chấm phảy ở phần cuối của một expression.

Sau đây là cú pháp cho Expression trong JSP:

<%= expression %>

Bạn có thể viết XML tương đương với cú pháp trên như sau:

<jsp:expression>
   expression
</jsp:expression>

Dưới đây là ví dụ đơn giản về Expression trong JSP:

<html> 
<head><title>A Comment Test</title></head> 
<body>
<p>
   Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html> 

Nó sẽ cho kết quả sau:

<p> Today's date: 11-Sep-2010 21:24:25 </p>

Comment trong JSP

Comment trong JSP đánh dấu text hoặc các lệnh mà JSP container nên bỏ qua. Một JSP comment là hữu ích khi bạn muốn ẩn hoặc bỏ qua phần đó trong JSP page.

Sau đây là cú pháp của Comment trong JSP:

<%-- This is JSP comment --%>

Ví dụ đơn giản sau minh họa Comment trong JSP:

<html> 
<head><title>A Comment Test</title></head> 
<body> 
<h2>A Test of Comments</h2> 
<%-- This comment will not be visible in the page source --%> 
</body> 
</html> 

Nó sẽ cho kết quả sau:

<h2>A Test of Comments</h2>  

Có một số chỉ lệnh đặc biệt mà bạn có thể sử dụng trong nhiều trường hợp khác nhau để chèn các comment hoặc các ký tự mà được đối xử một cách đặc biệt. Sau đây là liệt kê các chỉ lệnh này:

Cú phápMục đích
<%-- comment --%>Một JSP comment. Được bỏ qua bởi JSP engine
<!-- comment -->Một HTML comment. Được bỏ qua bởi trình duyệt
<\%Biểu diễn một static <% literal.
%\>Biểu diễn một static %> literal.
\'Một trích dẫn đơn trong một thuộc tính mà sử dụng các trích dẫn đơn
\"Một trích dẫn kép trong một thuộc tính mà sử dụng các trích dẫn kép

Directive trong JSP

Một directive trong JSP ảnh hưởng tới cấu trúc tổng thể của lớp Servlet. Nó thường có form sau:

<%@ directive attribute="value" %>

Có 3 loại thẻ directive trong JSP:

DirectiveMiêu tả
<%@ page ... %>Định nghĩa một thuộc tính page-dependent (phụ thuộc trang), như ngôn ngữ scripting, trang lỗi và các yêu cầu bộ đệm
<%@ include ... %>Include một file trong suốt giai đoạn phiên dịch
<%@ taglib ... %>Khai báo một thư viện thẻ, chứa các action tùy biến, được sử dụng trong trang đó

Chúng tôi sẽ giải thích JSP Directive trong chương riêng sau:

Action trong JSP

Action trong JSP sử dụng các chỉ lệnh trong cú pháp XML để điều khiển hành vi của Servlet engine. Bạn có thể chèn động một file, tái sử dụng các thành phần JavaBeans, chuyển người sử dụng tới trang khác, hoặc tạo HTML cho Java Plugin.

Chỉ có một cú pháp cho phần tử action trong JSP, khi nó phù hợp tiêu chuẩn XML:

<jsp:action_name attribute="value" />

Về cơ bản, các phần tử action trong JSP là các hàm được định nghĩa trước và có các JSP action sau:

Cú phápMục đích
jsp:includeInclude một file tại thời điểm trang đó được yêu cầu
jsp:useBeanTìm kiếm hoặc thuyết minh một JavaBean
jsp:setPropertyThiết lập thuộc tính của một JavaBean
jsp:getPropertyChèn thuộc tính của một JavaBean vào trong output
jsp:forwardChuyển người yêu cầu tới trang mới
jsp:pluginTạo code cho trình duyệt riêng mà tạo một thẻ OBJECT hoặc EMBED cho Java plugin
jsp:elementĐịnh nghĩa động các phần tử XML
jsp:attributeĐịnh nghĩa động thuộc tính của phần tử XML đã được định nghĩa
jsp:bodyĐịnh nghĩa động phần thân của phần tử XML đã được định nghĩa
jsp:textSử dụng để viết template text trong các JSP page và tài liệu JSP

Các đối tượng ẩn (Implicit) trong JSP

JSP hỗ trợ 9 biến được định nghĩa tự động, mà cũng được gọi là các đối tượng ẩn (implicit object). Các biến đó là:

Đối tượngMiêu tả
requestĐây là đối tượng HttpServletRequest mà liên kết với Request
responseĐây là đối tượng HttpServletResponse mà liên kết với Response tới Client
outĐây là đối tượng PrintWriter được sử dụng để gửi output tới Client
sessionĐây là đối tượng HttpSession mà liên kết với Request
applicationĐây là đối tượng ServletContext mà liên kết với application context
configĐây là đối tượng ServletConfig mà liên kết với page
pageContextSự gói gọn này sử dụng các đặc trưng Server-Spcific giống như hiệu năng cao JspWriters.
pageĐược sử dụng để gọi các phương thức được định nghĩa bởi lớp Servlet đã được phiên dịch
ExceptionĐối tượng Exception cho phép dữ liệu exception để được truy cập bởi JSP đã chỉ rõ

Điều khiển luồng trong JSP

JSP cung cấp đầy đủ tính năng của Java để được nhúng trong các Web application. Bạn có thể sử dụng tất cả APIs và xây dựng tất cả các khối Java trong chương trình JSP của bạn, bao gồm các lệnh điều khiển luồng, vòng lặp, …

Các lệnh điều khiển luồng trong JSP

Các khối if...else khởi đầu giống như một Scriptlet thông thường, nhưng Scriptlet được đóng tại mỗi dòng với HTML text được bao giữa các thẻ Scriptlet.

<%! int day = 3; %> 
<html> 
<head><title>IF...ELSE Example</title></head> 
<body>
<% if (day == 1 | day == 7) { %>
      <p> Today is weekend</p>
<% } else { %>
      <p> Today is not weekend</p>
<% } %>
</body> 
</html> 

Nó sẽ cho kết quả sau:

<p> Today is not weekend</p>

Bây giờ, bạn xem xét khối switch...case mà có một chút khác biệt bởi sử dụng lệnh out.printIn() và bên trong các Scriptlet:

<%! int day = 3; %> 
<html> 
<head><title>SWITCH...CASE Example</title></head> 
<body>
<% 
switch(day) {
case 0:
   out.println("It\'s Sunday.");
   break;
case 1:
   out.println("It\'s Monday.");
   break;
case 2:
   out.println("It\'s Tuesday.");
   break;
case 3:
   out.println("It\'s Wednesday.");
   break;
case 4:
   out.println("It\'s Thursday.");
   break;
case 5:
   out.println("It\'s Friday.");
   break;
default:
   out.println("It's Saturday.");
}
%>
</body> 
</html> 

Nó sẽ cho kết quả sau:

<p>It's Wednesday.</p>

Các lệnh vòng lặp trong JSP

Bạn có thể sử dụng 3 kiểu khối vòng lặp cơ bản trong Java là: for, while, và do…while trong chương trình JSP.

Dưới đây là ví dụ về vòng lặp for trong JSP:

<%! int fontSize; %> 
<html> 
<head><title>FOR LOOP Example</title></head> 
<body>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
   <font color="green" size="<%= fontSize %>">
    JSP Tutorial
   </font><br />
<%}%>
</body> 
</html> 

Nó sẽ cho kết quả sau:

   <font color="green" size="1">
    JSP Tutorial
   </font><br></br><font color="green" size="2">
    JSP Tutorial
   </font><br></br><font color="green" size="3">
    JSP Tutorial
   </font><br></br>

Ví dụ trên có thể được viết bởi sử dụng vòng lặp while trong JSP như sau:

<%! int fontSize; %> 
<html> 
<head><title>WHILE LOOP Example</title></head> 
<body>
<%while ( fontSize <= 3){ %>
   <font color="green" size="<%= fontSize %>">
    JSP Tutorial
   </font><br />
<%fontSize++;%>
<%}%>
</body> 
</html> 

Nó sẽ cho kết quả sau:

   <font color="green" size="1">
    JSP Tutorial
   </font>
    <font color="green" size="2">
    JSP Tutorial
   </font>
    <font color="green" size="3">
    JSP Tutorial
   </font>

Các toán tử trong JSP

JSP hỗ trợ tất cả toán tử logic và toán tử số học được hỗ trợ bởi Java. Bảng sau cung cấp danh sách tất cả toán tử với quyền ưu tiên cao nhất được liệt kê ở trên cùng, và quyền thấp nhất là ở dưới cùng.

Bên trong một expression, toán tử có quyền ưu tiên cao hơn sẽ được tính toán trước.

LoạiToán tửThứ tự ưu tiên
Postfix() [] . (toán tử dot)Trái sang phải
Unary++ - - ! ~Phải sang trái
Tính nhân* / %Trái sang phải
Tính cộng+ -Trái sang phải
Dịch chuyển>> >>> <<Trái sang phải
Quan hệ> >= < <=Trái sang phải
Cân bằng== !=Trái sang phải
Phép AND bit&Trái sang phải
Phép XOR bit^Trái sang phải
Phép OR bit|Trái sang phải
Phép AND logic&&Trái sang phải
Phép OR logic||Trái sang phải
Điều kiện?:Phải sang trái
Gán= += -= *= /= %= >>= <<= &= ^= |=Phải sang trái
Dấu phảy,Trái sang phải

Literal trong JSP

JSP Expression Language (EL) định nghĩa các literal sau:

  • Boolean: true và false
  • Integer: như trong Java
  • Floating point: như trong Java
  • String: với các trích dẫn đơn và kép; " được thay thế bởi \", ' được thay thế bởi \', và \ được thay thế bởi \\.
  • Null: null

Bình luận