Bài giảng Lập trình ứng dụng mạng: Bài 5 JSP (Java Server Pages) nhằm trình bày về giới thiệu sơ lược về JSP, cơ chế làm việc của JSP...bài giảng trình bày súc tích, khoa học, giúp sinh viên tiếp bài học nhanh, chúc các bạn học tốt.
Trang 1TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM
Trang 2PHẦN 1
GIỚI THIỆU JSP
Trang 3• JSP (Java Server Pages) cho phép ta chèn các đoạn mã
Java vào trong các tập tin văn bản dạng HTML hay XML
Sau đó, các tập tin này sẽ được chuyển đổi thành Java
Servlets để thực hiện việc tạo các trang web động
• Công nghệ Java Server Pages hiện đang là một phương
pháp tạo web động thu hút sự chú ý của các nhà phát triển
ứng dụng web JSP cung cấp phương tiện đơn giản để tạo
ra những trang web động
• Công nghệ JSP là một thành phần trong họ Java, sử dụng
ngôn ngữ Java như là ngôn ngữ kịch bản (script) Hiện nay JSP cùng với các thành phần JavaBean, Enterprise
JavaBean tạo nên sức mạnh cho họ Java trong việc xây
dựng các ứng dụng web
Trang 4• Trang JSP đơn giản hiện thị ngày tháng hiện hành
• Server xử lý thành phần của JSP để chuyển đổi thành dữ
liệu tĩnh trên trang HTML để trình bày trên Web browser
Trang 6<%}// end for loop %>
<H3> Isn't this fun</H3>
</body>
</html>
Kết qua sinh ra tại Web Browser:
My First JSP Page Hello, JSP World!
Trang 8• Phần này giới thiệu về các cú pháp (syntax) sau đây:
Trang 9• Comments: là những chú thích, ghi chú được chèn vào để
giải thích cho người đọc code HTML hoặc JSP dễ hiểu
Servlet không biên dịch thành phần này
• Trang JSP chứa hai loại comments là:
• Hidden comment (hay còn gọi là JSP comment).
• Output comment (hay còn gọi là HTML comment).
• Output comments được xuất vào HTML file để gửi đến
client
• Hidden comment chỉ hiển thị trong source code của trang
JSP mà không xuất vào HTML file để gửi đến client
Hidden comment là ẩn đối với HTML file
Trang 10• Cú pháp của Output Comments:
<! comment [ <%= expression %> ] >
• Cú pháp này sinh ra một ghi chú được thấy trong HTML
file HTML file này được sinh ra bởi JSP file
• Trong cú pháp này ta thấy Output comment có thể chứa
hay không chứa một biểu thức (expression) của JSP
Những gì chứa trong dấu ngoặc vuông có nghĩa là tùy
chọn Biểu thức JSP (expression) sẽ được tìm hiểu ở các
slide sau
OUTPUT COMMENTS
Trang 11Ví dụ: đây là một code mẫu chứa trong tập tin jsp0002.jsp
<! File jsp002.jsp
02/13/2010
Mô tả các ghi chú nhằm xuất ra file HTML.
Mô tả các ghi chú ẩn - hidden comments.
Cũng mô tả các biểu thức - expressions.
<% This is hidden comment is won't %>
<% appear in the output HTML %>
Trang 12Đây là file HTML được sinh ra từ file JSP của slide trước Nhưng file HTML này không xuất
gì ra Web Browser cả.
<! File jsp002.jsp
02/13/2010
Mô tả các ghi chú nhằm xuất ra file HTML.
Mô tả các ghi chú ẩn - hidden comments.
Cũng mô tả các biểu thức - expressions.
<! Date and time is Sat Feb 13 08:54:00 ICT 2010 >
<! The following space was produced by >
Trang 13• Hidden comment được dùng để ghi chú trong các file JSP
nhưng không xuất ra các file HTML khi gửi xuống client Cúpháp:
<% hidden comment %>
• JSP engine bỏ qua, không xử lý bất kỳ code nào nằm tronghidden comment Do đó hidden comment cũng không xuất
hiện ở Web Browser phía client
• Ta thấy có bốn ký tự %> nằm trong cú pháp của hidden
comment Cho nên nếu muốn chúng xuất hiện là chuỗi
trong hidden comment thì ta phải viết là %\> (có dấu
xuyệt)
HIDDEN COMMENTS
Trang 14• Declaration được dùng để khai báo các biến (variable) các
phương thức (method) được dùng sau đó trong các JSP
source file Cú pháp declaration (chú ý dấu chấm than):
• Một declaration có tầm vực trong một trang (page
scope) Có nghĩa là một khai báo (declaration) biến hay
hàm trong một trang sẽ được sử dụng hợp lệ bởi các
scriptlets, expressions và các declarations khác trong cùng
một JSP source file
Trang 15Theo Sun, có một số nguyên tắc sử dụng cho các JSP declarations:
• Một declaration phải chứa ít nhất một phát biểu khai báo hoàn chỉnh
• Có thể khai báo nhiều biến (variables) hoặc phương thức (methods)
trong một thẻ (tag) declaration, nhưng phải cách nhau bởi dấu chấm
phẩy
• Các declaration phải hợp lệ trong các ngôn ngữ kịch bản (scripting
language) được dùng trong JSP file Các declaration phải phù hợp với
đặc tả của ngôn ngữ Java.
• Một đặc tả phải được kết thúc bằng một dấu chấm phẩy Nguyên tắc
này giống với nguyên tắc dành cho Scriptlet, nhưng khác với nguyên
tắc dành cho một Expression.
• Ta phải khai báo một biến hoặc là một phương thức trước khi sử dụng
chúng trong file JSP
• Cũng có thể dùng một biến hoặc một phương thức được khai báo
trong packages imported bởi Page Directive, vì thế không cần phải khai
báo lại chúng lần nữa trong một declaration.
Trang 16• Cú pháp cho một tag (thẻ) để khai báo một biểu thức như
sau (chú ý dấu bằng theo sau dấu %):
Trang 17<%! java.util.Date myDate = new java.util.Date(); %>
<P>Some JSP expression follow<BR>
Trang 18• Chúng ta vừa mới khảo sát:
Trang 19PHẦN 3
SCRIPTLET
(mẩu kịch bản)
Trang 20• Thẻ (tag) scriptlet dùng để chứ một đoạn mã Java rồi đượcnhúng (chèn) vào trong mã HTML.
• Một scriptlet có thể chứa số lượng bất kỳ các phát biểu
(statements) các khai báo biến (variable), khai báo phươngthức (method) hoặc biểu thức (expressions)
• Cú pháp của scriptlet như sau:
<% code fragment %>
Trang 21Theo Sun, ta có thể dùng scriptlets cho các việc sau đây:
• Dùng khai báo biến, khai báo phương thức sẽ được dùng
trong file JSP
• Viết các biểu thức hợp lệ (tương tự như phần khai báo
biểu thức expression của phần trước)
• Sử dụng bất kỳ đối tượng tiềm ẩn (implicit) hoặc bất kỳ đối
tượng nào đã được khai báo bằng thẻ <jsp:useBean> (thẻ
này sẽ được trình bày ở các slide sau)
• Để viết bất kỳ phát biểu hợp lệ nào (statement) Các phát
biểu này phải phù hợp với quy định cú pháp, văn phạm củangôn ngữ Java
Trang 22<% }//end for loop %>
• Với Scriptlet, JSP cho phép ta nhúng và thực thi các
Servlet, JavaBean, Java Code
Trang 23<! File jsp004.jsp 02/13/2010 Illustrates scriptlets >
<% myDate = new java.util.Date(); %>
The date is <%= myDate %> <BR>
<% two scriptlets follow %>
<% for(int i=0; i<11; i++){ %>
Trang 25PHẦN 4
DIRECTIVE
(chỉ hướng)
Trang 26Phần này trình bày hai loại Directive:
• Include Directive
• Page Directive
Cú pháp:
<%@ directivename attribute=value %>
Nếu có nhiều thuộc tính thì dùng cú pháp sau:
<%@ directive attribute1="value1" attribute2="value2" attributeN="valueN" %>
DIRECTIVE
Trang 27• Include directive được dùng để chèn một file vào trong
một trang JSP khi trang JSP được biên dịch
• File được chèn vào trang JSP được gọi là included file
Included file có thể là:
• JSP file
• HTML file
• Text file
• File được viết code bằng ngôn ngữ Java
• Khi chèn file, chú ý cẩn thận để included file không có chứa
các thẻ như <html>, </html>, <body>, hoặc </body> Bởi vì
cả nội dung của included file được thêm vào JSP file, nếu
có các thẻ đó trong included file sẽ gây đụng độ với các thẻ tương tự trong JSP file.
• Chú ý: một số trình duyệt web chấp nhận đụng độ, một số
trình duyệt không chấp nhận đụng độ.
INCLUDE DIRECTIVE
Trang 29<! File jsp005.jsp 02/15/2010 Illustrates the JSP Include
Trang 31<! File jsp005a.html 02/15/2010 Illustrates the Include
Trang 32The date and time produced by an include file:
Mon Feb 15 14:47:47 ICT 2010
Include an HTML file here:
An included HTML file
Trang 33Sự khác nhau giữa static include và dynamic include:
• Static Include: nội dung văn bản của included file sẽ được chèn vào
JSP file Việc này xảy ra ở giai đoạn translation Nó giống như cắt dán
văn bản.
• Dynamic Include: included file sẽ được dịch riêng với JSP file Kết
quả (response) sau khi dịch của included file sẽ được chèn vào JSP
file Việc này xảy ra ở giai đoạn run-time.
• Static include không thể chấp nhận truyền đối số, còn dynamic include thì chấp nhận truyền đối số Static includes chạy nhanh hơn dynamic
includes
INCLUDE DIRECTIVE
Trang 34• Page directive được dùng để định nghĩa các thuộc tính
áp dụng cho cả một trang JSP và bất cứ static file nào
được chèn vào nó bằng Include Directive hoặc
<jsp:include> Trang JSP và các static file được chèn vào
nó được gọi là một translation unit.
• Cú pháp đơn giản: <%@ page attributes=value%>
• Ta có thể sử dụng page directive nhiều lần để thiết lập giá
trị cho các thuộc tính trong một JSP page (translation unit) Nhưng nếu dùng cho thuộc tính import thì chỉ được sử
dụng không quá một lần
• Ta có thể đặt page directive bất cứ chỗ nào trong
translation unit và nó có tầm vực trên cả một translation
unit Để khai báo rõ ràng và dễ hiểu thì nên đặt các page
directive ở đầu trang JSP chính
PAGE DIRECTIVE
Trang 35Cú pháp đầy đủ của Page Directive:
Trang 36Ý nghĩa của các thuộc tính của Page Directive:
• language: Chỉ định ngôn ngữ lập trình sẽ được sử dụng (ngôn ngữ
kịch bản) trong trang văn bản JSP Hiện nay trang JSP chỉ sử dụng
một ngôn ngữ duy nhất đó là Java.
• extends: chỉ định địa chỉ lớp cha của lớp mà trang jsp cần sử dụng.
• import: đây là thuộc tính rất quan trọng, thường sử dụng cho bất kỳ
trang JSP nào cần đến các lớp của Java cũng như của người sử
dụng Với thuộc tính này ta có thể chỉ ra lớp cụ thể hoặc tập hợp
các lớp cần dung.
• session: nếu có giá trị là true, trang JSP của ta có thể sử dụng
“phiên giao dịch” để trao đổi và lưu giữ thông tin giữa các trang JSP với nhau Ngược lại, trang JSP không thể dung các đối tượng
session cho bất cứ công việc gì Giá trị mặc định của thuộc tính này
là true.
• buffer: chỉ định kích thước vùng đệm cần dung cho trang JSP (tính
theo kilobytes) Giá trị mặc định là 8KB Thuộc tính này dung với
PAGE DIRECTIVE
Trang 37Ý nghĩa của các thuộc tính của Page Directive (tiếp theo):
• autoFlush: giá trị mặc định là true Nếu mang giá trị false, một
exception sẽ phát sinh để báo lỗi khi bộ đệm tràn.
• isThreadSafe: cho phép tính chất đa luồng hay không Nếu
mang giá trị true, động cơ JSP được phép gửi nhiều yêu cầu
đến trang JSP cùng một lúc (mang tính chất đồng thời) Ngược
lại, với giá trị false, chúng ta chỉ có thể nhận tại mỗi thời điểm
một yêu cầu Thuộc tính này có giá trị mặc định là true.
• info: chỉ định những thông tin về trang JSP có thể truy cập
thông qua hành vi Servlet.getServletInfo().
• errorPage và isErrorPage: phục vụ cho dò tìm lỗi khi phiên
dịch trang JSP, khi isError là true thì các exception sẽ chuyển
đến trang chỉ định trong errorPage.
• contentType: dung để mã hóa trang văn bản JSP trước khi gửi
tới trình duyệt Giá trị mặc địnhcho mimeType là text/html và
PAGE DIRECTIVE
Trang 38Một số ví dụ về Page Directive:
• <%@ page laguage=“java” %>
• <%@ page import=“java.util.*, java.lang.*” %>
• <%@ page buffer=“5kb” autoFlush=“false” %>
• <%@ page errorPage=“error.jsp” %>
• <%@ page info="Info about the page" %>
PAGE DIRECTIVE
Trang 39Ví dụ:
<! File jsp006.jsp 02/16/2010 Illustrates the JSP Page Directive >
<% Some page directives for the import attribute %>
<%@ page import="java.util.Date" %>
<%@ page import="java.awt.*" %>
<% A page directives for the info attribute %>
<%@ page info="Info about the page" %>
<html>
<body>
The date and time produced by a Date object using the import page directive to provide
the path to the Date class: <BR>
<B><%= new Date() %></B>
<BR><BR>
The default String representation of a Button object
produced by using the wildcard version of the
import page directive to provide the path to the Button class: <BR>
<B><%= new Button("The Label") %></B>
<BR><BR>
Information about the page provided by the info attribute
of a page dirctive and accessed using the <B>getServletInfo()</B>
method of the Servlet class.<BR>
<B><%=this.getServletInfo() %></B>
</body>
PAGE DIRECTIVE
Trang 40• Kết quả:
The date and time produced by a Date object using the import
page directive to provide the path to the Date class:
Tue Feb 16 17:02:57 ICT 2010
The default String representation of a Button object produced by
using the wildcard version of the import page directive to provide the path to the Button class:
java.awt.Button[button0,0,0,0x0,invalid,label=The Label]
Information about the page provided by the info attribute of a
page dirctive and accessed using the getServletInfo() method
of the Servlet class.
Info about the page
PAGE DIRECTIVE
Trang 41PHẦN 5
ACTIONS
Trang 42• Các JSP actions được sử dụng để điều khiển các hành vi
của servlet engine Ta có thể dùng actions để tự động chènmột file, sử dụng một JavaBean trong JSP, chuyển tiếp từ
một trang JSP đến một trang web khác hoặc sinh ra một
Trang 43• Action này được dùng để chèn một tập tin khác vào trong
tập tin JSP Action này chèn file bên ngoài vào khi file đó
được yêu cầu trong file JSP chính Khi thực hiện các thao
tác trong tập tin được chèn vào rồi thì JSP Engine mới
thực hiện các công việc còn lại của trang JSP chính
• Cú pháp:
<jsp:include page=“{relative URL | <%= expression
%>}" flush="true" />
• Trong đó: page=“{relative URL | <%= expression %>}" chỉ
định vị trí tập tin cần gắn vào hoặc biểu thức thuộc kiểu
String có giá trị là địa chỉ URL tương đối
Trang 44• Được dùng để tải những thành phần thêm vào (plugin) choWeb Browser khi cần thi hành một applet hoặc một Bean
nào đó Action này cũng dùng thay cho các thẻ <object> vàthẻ <embed> có sẵn trong ngôn ngữ HTML
Trang 45[ align="bottom | top | middle | left | right" ]
[ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ]
[ nspluginurl="URLToPlugin" ] [ iepluginurl="URLToPlugin" ] > [ <jsp:params>
[ <jsp:param name="parameterName" value="{parameterValue |
Trang 46Trong đó:
• type="bean | applet“: cho biết loại đối tượng mà plug-in
sẽ thực thi Ta phải xác định hoặc là Bean hoặc là Applet
Không có giá trị default cho thuộc tính này
• code="classFileName“: tên tập tin class cần thi hành.
• codebase="classFileDirectoryName": đường dẫn đến
thư mục chứa tập tin Java class Nếu không cung cấp giá
trị cho thuộc tính này thì đường dẫn chứa JSP file đang gọithẻ <jsp:plugin> này sẽ được sử dụng
• name="instanceName“: tên đối tượng Bean hoặc Applet
(instance of the Bean or applet)
• archive="URIToArchive, “: danh sách các đường dẫn
đến các tập tin lưu trữ (archive files) sẽ được nạp trước để
phục vụ cho lớp chính Các đường dẫn cách nhau bởi dấu
phẩy
Trang 47Trong đó:
• align="bottom | top | middle | left | right“: Cho biết vị trí xuất hiện
của image, object, hoặc applet là ở dưới, ở trên, ở giữa, bên trái, bên
phải tùy thuộc vào vị trí của thẻ <jsp:plugin> xuất hiện trong file JSP
• height="displayPixels" width="displayPixels“: chiều cao và chiều
rộng của vùng chứa của object hoặc applet trong trang web
• hspace="leftRightPixels" vspace="topBottomPixels“: khoảng cách
theo các chiều ngang (h-horizon) và chiều đứng (v-vertical) của vùng
chứa của object hoặc applet.
• jreversion="JREVersionNumber | 1.1“: version của Java Runtime
Environment (JRE) mà applet hoặc Bean yêu cầu Giá trị ngầm định là
1.1
• nspluginurl="URLToPlugin“ hoặc iepluginurl="URLToPlugin“: địa
chỉ URL, nơi để tải xuống JRE plug-in cho trình duyệt Netscape
Navigator hoặc Internet Explorer.