luận văn xây dựng và ứng dụng javaserver pages (jsp) trong phân tích thiết kế hệ thống cơ sở dữ liệu - Pdf 12

LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 1

LUẬN VĂN TỐT NGHIỆP KHOA
CƠNG NGHỆ THƠNG TIN Đề tài

Xây dựng và ứng dụng JavaServer Pages (JSP) trong
phân tích thiết kế hệ thống cơ sở dữ liệu

http://localhost:8100/thanhk.jsp?title=Van+Dau
Thanks for reading <i><%=request.getParameter(“title”)%><i>book.
Kỹ thuật JSP là một thành phần trong đại gia đình Java; nó sử dùng ngơn
ngữ kịch bản dựa vào ngơn ngữ lập trình Java, và các trang JSP được biên dịch
thành servlets. Từ đó chúng ta cũng nhận biết được, JSP thì khơng phụ thuộc
bất kỳ nền (platform) nào. Nó đáp ứng được khuynh hướng của Sun
MicroSystem là “write one, run anywhere”.
Các trang JSP có thể gọi các thành phần JavaBeans, Enterprise
JavaBeans (EJB) hoặc custom tags để thực hiện các xử lý trên server. Và như
thế, kỹ thuật JSP là thành phần chủ chốt trong kiến trúc khả chuyển của Java
cho những ứng dụng dựa vào Web.
Như đã biết, JSPs sẽ biên dịch thành servlets nhưng JSP khơng thể thay
thế servlet vì các lý do sau:
 Một số tác vụ được giải quyết rất tốt bằng servlet. Ví dụ, các ứng dụng
xuất ra dữ liệu nhị phân hoặc chỉ xác định nơi gởi trở lại cho người dùng
(bằng cách dùng response.sendRedirect) được dùng servlet thì tốt nhất.
 Một số tác vụ khác lại được giải quyết rất tốt bằng JSP như các tình huống
mà cấu trúc nền tảng của trang HTML là cố định nhưng các giá trị trong nó
lại thay đổi.
 Còn các tác vụ còn lại cần sự kết hợp cả servlet và JSP. Ví dụ, trong u
cầu gốc được trả lời bằng một servlet mà thực hiện mọi cơng việc, lưu trữ
các kết quả trong các Beans và điều phối u cầu này đến một trong những
trang JSP có thể hiển thị nó.
Cả ba định hướng này đều có chổ đứng của nó. Chẳng có định hướng
nào hổ trợ đầy đủ cho mọi ứng dụng .
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 3
Trước khi đi vào chi tiết cơng nghệ JSP, chúng tơi có một vài so sánh các

e
e
m
m
p
p
l
l
a
a
t
t
e
et
t
e
e
x
x
t
tTrong nhiều trường hợp, phần lớn các trang JSP chỉ bao gồm HTML
tĩnh, được biết như là template text. Có hai ngoại lệ phụ cho quy tắc “template
text được chuyển thẳng sang HTML tĩnh”. Đầu tiên, nếu chúng ta muốn có
<% trong luồng xuất thì chúng ta cần phải đặt <\% trong template text. Thứ

Trong JSP có rất nhiều element có cú pháp XML như jsp:useBean,
jsp:include, jsp:setProperty, Tuy nhiên scripting elements lại có hai dạng cú
pháp sau:

JSP Syntax XML Syntax
<% = Expressions %>

<jsp:expression>
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 4
Java code
</jsp:expression>
<% Scriptlets %> <jsp:scriptlet>
Java code
</jsp:scriptlet>
<%! Declarations %> <jsp:declaration>
Java code
</jsp:declaration>

II.1. Các biến được định nghĩa sẵn trong JSP
Để đơn giản hố mã trong các biểu thức hay scriptlets trong JSP, người
ta cung cấp cho chúng ta chín đối tượng đã được định nghĩa trước, có người
còn gọi là các đối tượng ngầm định. Do các khai báo trong JSP nằm ngồi
phương thức _jspService (được gọi bởi service) nên các đối tượng này khơng
cho phép các khai báo truy cập vào.
request
Biến này có kiểu là javax.servlet.http.HttpServletRequest, có phạm vi
trong một u cầu (request). Nó cho phép chúng ta truy cập vào các tham số


SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 5
Biến này có phạm vi trang (page) và có kiểu tương ứng là
javax.servlet.ServletConfig.
pageContext
Biến này có kiểu là javax.servlet.jsp.PageContext và có phạm vi là trang
(page). pageContext cho phép một điểm truy cập duy nhất tới nhiều thuộc tính
của trang và cung cấp một nơi thuận tiện để lưu trữ dữ liệu dùng chung. Biến
pageContext lưu trữ giá trị của javax.servlet.jsp.PageContext cùng với trang
hiện hành. Có thể xem chi tiết trong chương II về JavaBeans.
page
Biến này đồng nghĩa với this và điều này thì khơng hữu ích trong ngơn
ngữ lập trình Java, có kiểu là java.lang.Object và có phạm vi trang (page).
exception
Trong một trang lỗi, chúng ta có thể truy cập vào đối tượng exception.
Biến này có kiểu là java.lang.Throwable và phạm vị là trang (page).

II.2. Biểu thức trong JSP
Biểu thức trong JSP được dùng để chèn các giá trị trực tiếp vào luồng
xuất. Nó có dạng sau:
<%= Java expressions %>
Biểu thức này được định trị, được chuyển thành chuỗi, và được chèn
vào trong trang. Sự định trị diễn ra ở thời gian runtime (khi trang được u
cầu) và do đó có đầy đủ quyền truy cập các thơng tin của u cầu này. Ví dụ
sau đây mơ tả ngày/giờ mà trang được u cầu:
Current time: <%= new java.util.Date() %>
Trong Java mỗi câu lệnh đều có dấu ‘;’ kết thúc dòng. Tại sao biểu thức
trong JSP lại khơng có dấu ‘;’? Vì biểu thức này được đưa vào luồng xuất
chẳng hạn như PrintWriter. Với ví dụ trên có thể chuyển vào servlet như sau:
PrintWriter out = response.getWriter();

<%! Java Code %>
Các khai báo trong JSP thì khơng phát sinh ra bất kỳ thơng xuất nào,
chúng thường được dùng để liên kết với các biểu thức hoặc scriptlets. Chẳng
hạn, đây là một trang JSP mà in ra số lần truy cập vào trang.

III. Xử lý nhúng và chuyển hướng giữa các trang
Trong q trình xử lý và chuyển dữ liệu cho form chúng ta có thể nhúng
và triệu gọi những trang JSP khác với trang hiện hành.Ví dụ chúng ta có thể
đưa một trang HTML hoặc JSP vào trong trang JSP hiện tại để hổ trợ thêm thư
viện hay tính năng bổ sung nào đó. Hay khi nhận được dữ liệu submit từ trình
khách, trang JSP nhận được dữ liệu có thể chuyển hướng hoặc triệu gọi đến
trang JSP khác.

III.1. Nhúng file vào trang với chỉ thi include
Chỉ thị <%include %> thường dùng để dem một nội dung file .html hay
jsp bên ngồi vào trang hiện hành. Cú pháp sử dụng như sau:
<%@include file = “filename”%>
Ví dụ: Trong chương trình chúng ta có sử dụng các hàm thư viện chứa
trong file Common.jsp. Thư viện này được đưa vào trang JSP hiện hành như
sau:
<%@include file = “Common.jsp”%>

III.2. Sử dụng thẻ <jsp:include>
Chỉ thị %@include % chỉ dùng để nhúng các mã nguồn tĩnh. Nếu muốn
nhúng kết quả kết xuất từ các trang jsp, servlet hay .html khác vào trang hiện
hành chúng ta sử dụng thẻ <jsp:include> với cú pháp như sau:
<jsp:page include page = “filename” flush = “true”/>
Ví dụ: trong chương trình sử dụng thẻ <jsp:include> để nhúng kết quả
của trang Header.jsp, Footer.jsp vào các trang JSP như sau:
<jsp:include page = “Header.jsp” flush = “true”/>

trước thì thơng báo đăng nhập thành cơng, còn nếu khơng đúng hoặc rỗng sẽ
chuyển đến trang thứ 3 thơng báo u cầu đăng nhập những trường còn thiếu.
Ví dụ:
Login.jsp
<html>
<%
String param = request.getParameter (“sError”);
if (param.length() !=0)
{
out.println (“<b>”+ param + “</b>”);
}
%>

<form method = post action = “security.jsp”>
Username: <input type = text name = “username”>
Password: <input type = password name = “password”>
<input type = submit value = Login>
</form>
</html>
security.jsp
<html>
<%
String user = (String) request.getParametrer(“username”);
if (user.equals (“admin”))
{
%>
<jsp:forward page = “thongbao.jsp”/>
<%
} else {
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003

Ngồi bốn thuộc tính này jsp:plugin còn có các thuộc tính sau và hầu hết
giống (nhưng khơng phải là tất cả) như các thuộc tính của APPLET tag.
codebase, align, archive, hspace, name, vspace, title
Giống như APPLET tag.
jreversion
Xác định số phiên bản của Java Runtime Environment, các giá trị có thể
nhận là “1.1”, “1.2”.
nspluginurl
URL cho Netscape mà có thể download Plug-In. Giá trị mật định sẽ
hướng người dùng đến web site của Sun, nhưng với intranet chúng ta có thể
muốn chỉ dẫn người dùng đến một bản sao cục bộ.
iepluginurl
URL cho Internet Explorer mà có thể download Plug-In.
I
I
I
I
I
I
.
.
6
6
.
.T
T
h


LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 9
jsp:fallback cung cấp văn bản thay thế đối với các trình duyệt khơng hổ trợ
OBJECT hay EMDEB. Chúng ta sử dụng action này giống như là dùng văn bản thay
thế được đặt trong APPLET tag
<APPLET CODE=“MyApplet.class”
WIDTH=457 HEIGHT=350>
<B> Error: this example requires Java. </B>
</APPLET>
với
<jsp:plugin type=“applet”
code=“MyApplet.class”
width=“457” height=“350” >
<jsp:fallback>
<b> Error: this example requires Java. </b>
</jsp:fallback>
</jsp:plugin>
I
I
I
I
I
I
.
.
7
7

page directive cho phép chúng ta điều khiển cấu trúc của servlet bằng
cách đưa vào các lớp, đặt MIME type, …. Một page directive có thể được đặt
bất cứ nơi nào trong trang JSP.
<%@ page import=“java.util.*, com.vandau.*” %>
page directive định nghĩa một số thuộc tính phụ thuộc vào trang và giao tiếp
giữa các thuộc tính này với JSP container.
language
Định nghĩa ngơn ngữ kịch bản được sử dụng trong scriptlets, biểu thức
và khai báo. Trong JSP 1.2 là phiên bản mới nhất chỉ có hổ trợ “java” cho
thuộc tính này do đó “java” này cũng là giá trị mật định.
<%@ page language=“java” %>
extends
Thuộc tính này chỉ định lớp cha (superclass) của servlet sẽ được phát
sinh cho trang JSP, có dạng sau:
<%@ page extends=“package.class” %>
Chú ý rằng khi sử dụng thuộc tính này phải hết sức cẩn thận vì tại server
có thể đã dùng lớp cha mật định.
import
Thuộc tính này mơ tả các kiểu sẵn dùng trong mơi trường kịch bản (theo
java). Chúng ta có thể import vào từng lớp hoặc cả một gói (package).
<%@ page import=“package.class | package.*” %>
Nếu import vào nhiều lớp hay packages thì cách nhau dấu “,”.
session
Thuộc tính session kiểm sốt liệu có hay khơng một trang tham gia vào
HTTP session. Có hai giá trị “true” và “false”. Mật định là “true”, chỉ ra rằng
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 10
biến ngầm định session nên được nối kết với session hiện hành. Giá trị “false”

contentType
Thuộc tính này gán Content-Type cho response header, mơ tả kiểu
MIME của tài liệu được gởi đến client. Thuộc tính contentType có một trong
hai dạng sau:
<%@ page contentType=“MIME-Type” %>
<%@ page contentType=“MIME-Type; charset=Character-Set” %>
Một số kiểu MIME-Type thường dùng: “text/html”, “text/xml”,
“text/plain”, “image/gif”, “image/jpeg”.
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 11
pageEncoding
Định nghĩa bộ mã hóa ký tự cho trang JSP (character encoding), thuộc
tính này hổ trợ cho bộ mã Unicode và Latin-1, có giá trị mật định là “ISO-
8859-1”
III.8. Chuyển hướng sang trang mới với sendRedirect()
Ngồi việc chuyển tiếp chúng ta có thể sử dụng phương thức
sendRedirect() để chuyển hướng và triệu gọi trang JSP khác xử lý. Sự khác
nhau giữa chuyển tiếp (forward) và chuyển hướng (redirect) đó là lệnh
sendRedirect () chỉ thực hiện triệu gọi trang mà khơng chuyển tham số của
trang hiện hành cho trang chuyển hướng.
Ví dụ: từ trang security.jsp ta có thể chuyển hướng đến trang
thongbao.jsp bằng lệnh như sau:
<%

response.sendRedirect (“thongbao.jsp”);
%>

IV. SERVLET


SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 12
tin cấu hình (getServletConfig), trả về thơng tin tư thân của servlet
(getServletInfo). Cụ thể lớp giao tiếp Servlet được mơ tả như sau:
interface Servlet
{
void destroy ()
ServletConfig getServletConfig ();
String getServletInfo ();
void init (ServletConfig config);
void service (ServletRequest req, ServletResponse res);
}
IV.2.1. Phương thức khởi tạo init ()
public void init ()
Phương thức khởi tạo này được gọi khi lần đầu tiên trình chủ Web server
nạp mã thực thi của servlet từ tập tin .class vào bộ nhớ và bắt đầu cho phép
servlet hoạt động. Chúng ta có thể dựa vào phương thức này để khởi tạo các
biến mơi trường và giá trị ban đầu cần thiết cho q trình thực thi servlet sẽ
diễn ra tiếp theo. Thường trong phương thức init () ta khởi tạo giá trị mảng,
tạo sẵn kết nối với cơ sở dữ liệu, nạp các lớp thư viện cần thiết…. Ví dụ chúng
ta có thể nạp trình điều khiển JDBC truy xuất cơ sở dữ liệu, tạo sẵn kết nối đến
nguồn dữ liệu cho servlet trong phương thức init () như sau:
public class staffView extends GenericServlet
{
String DBDriver = “sun.jdbc.odbc.JdbcOdbcDriver”;
String strConn = “jdbc:odbc:quanliNV”;
Connection con;
public init ()
{
Class.forName (DBDriver). newInstance ();

IV.2.3. Phương thức hủy destroy ()
Khi servlet khơng còn dùng nữa hoặc hết thời gian qui định lưu giữ trong
bơ nhớ của trình chủ Web server, nó sẽ bị trình chủ giải phóng. Trước khi
servlet bị hủy phươg thức destroy () sẽ được gọi. Nếu như chúng ta dùng
phương thức init () để thực hiện khởi tạo biến cho servlet thì phương thức
destroy () ngược lại có thể dùng để dọn dẹp tài ngun mà các biến chiếm giữ,
đóng các kết nối mà phương thức init () đã mở…
Ví dụ: public destroy ()
{
conn.close ();
}

IV.2.4. Phương thức getServletConfig () và getServletInfo ()
Hai phương thức này nhằm mục đích cung cấp thơng tin. Phương thức
getServletConfig () giúp người sử dụng servlet có được đối tượng
ServletConfig chưa các thơng tin khởi tạo từ mơi trường ngồi đưa vào servlet,
getServletInfo () trả về một chuỗi thơng tin mơ tả ý nghĩa và mục đích của
servlet.
public String getServletInfo ();
public ServletConfig getServletConfig ();

IV.3. Chu trình sống của Servlet và JSP
Chu trình sống của servlet
Chu trình sống tính từ khi servlet bắt đầu được hệ thống gọi nạp vào bộ
nhớ cho đến khi nó bị loại khỏi trình chủ Web server vì khơng còn cần đến
nữa. Q trình sống của servlet trải qua các giai đoạn sau:
 Nạp servlet
 Khởi tạo servlet
 Thực thi servlet
 Dọn dẹp servlet

hiện…. Trước khi chấm dứt, Web server sẽ gọi đến phương thức hủy destroy
() của servlet. Đây là cơ hội để servlet thực hiện một số thao tác dọn dẹp cần
thiết như lưu dữ liệu xuống đĩa, ghi nhớ trạng thái của servlet để phục vụ cho
lần khởi động sau, đóng kết nối với cơ sở dữ liệu…. Và mặc dù Java có thể tự
động thu gom rác trong bộ nhớ nhưng nếu chúng ta đã cấp phát một khối
lượng bộ nhớ lớn cho servlet trong q trình làm việc, chúng ta nên thực hiện
giải phóng chúng trong phương thức destroy ().
Chu trình sống của JSP
Tương tự như chu trình sống của servlet, trang JSP cũng có cbhu trình
sống xác định tính từ khi hệ thống đọc biên dịch trang JSP, gọi thực thi và loại
trang khỏi bộ nhớ. Chu trình sống của JSP trải qua các giai đoạn sau:
 Biên dịch trang JSP
 Nạp trang
 Khởi tạo
 Thực thi
 Dọn dẹp
Biên dịch trang JSP
Khi trình duyệt u cầu trang JSP, ví dụ triệu gọi trang JSP bằng URL
http://localhost:8100/Default.jsp. Web server sẽ kiểm tra trang JSP đã được
biên dịch hay chưa. Nếu chưa biên dịch hoặc đã biên dịch nhưng trang JSP
mới vừa thay đổi trong mã nguồn thì Web server sẽ thực hiện biên dịch trang
JSP. Q trình biên dịch JSP thực tế là chuyển trang JSP thành servlet. File
biên dịch . class của trang sẽ được đặt trong thư mục đệm. Như chúng ta thấy,
q trình biên dịch trang chỉ diễn ra một lần. Nếu trang đã biên dịch và sau đó
chúng ta khơng có thay đổi gì trong trang nguồn thì q trình biên dịch sẽ
khơng xảy ra, do đó tốc độ thực thi trang sẽ nhanh hơn. Sau khi trang đã được
biên dịch, mã trang sẽ được nạp vào bộ nhớ để thực thi.
Nạp trang
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003


và nâng cấp ứng dụng Web với hàng trăm trang JSP sẽ rất khó khăn. Trong
q trình phát triển ứng dụng Web theo nhóm, việc trộn lẫn mã JSp sẽ rất khó
khăn. Trong qua trình phát triển ứng dụng Web theo nhóm, việc trộn lẫn mã
Java và HTML trong trang JSP cho thấy khơng hiệu quả. Khó có thể tách rời
giữa cơng việc viết mã cho ứng dụng và nhóm xây dựng giao diện. Mã trang
JSP ở dạng thuần văn bản nên thường khơng che được mã nguồn của logic
chương trình.
Với servlet, tuy phải biên dịch và đăng ký thủ cơng với trình chủ nhưng
bù lại tính bảo mật cao hơn. Chúng ta chủ cần cung cấp cho trình chủ Web
server bản servlet nhị phân (file .class) đã qua bước biên dịch mã khơng cần
đến mã nguồn của servlet ban đầu. Mặc khác, các servlet có thể tương tác liên
hồn, với nhau để tạo nên những kết xuất tùy biến và đa dạng trước khi trả kết
quả về cho trình khách. Servlet có thể phân rã các đơn thể của dự án và phát
triển độc lập nhau như các thành phần riêng biệt để ráp lại trong một tổng thể
chung. Tuy nhiên, việc kết xuất trong servlet thường dựa vào phương thức
print () hoặc println (). Cơng việc quyết định giao diện cho kết xuất hồn tồn
phụ thuộc vào lập trình viên với hàng loạt các lệnh print () hay println () rất
khó quản lý.
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 16
Quyết định sử dụng JSP, Servlet hay kết hợp cả hai là tuỳ vào từng dự án
và mục đích của chương trình mà chúng ta muốn phát triển. Thơng thường đối
với những dự án nhỏ, u cầu thời gian nhanh, JSP là lưa chọn thích hợp nhất.
Trường hợp với dự án cần sự độc lập và chỉ thiên về xử lý ta nên sử dụng
servlet. Trường hợp với dự án lớn chúng ta nên kết hợp cả servlet và JSP. Mơ
hình kết hợp tốt nhất giữa servlet và JSP thường được gọi là MCV (Model –
View – Controler) trong đó servlet đóng vai trò trung tâm điều khiển
(controler) đưa ra các quyết định xử lý. JSP đóng vai trò thể hiện giao diện hay

e
s
sI
I
.
.T
T
a
a
g
gl
l
i
i
b
b
r
r
a
a
r

form, truy cập cơ sở dữ liệu và các dịch vụ ở mức xí nghiệp khác như email,
quản lý thư mục và điều khiển luồng. Trước khi custom action xuất hiện thì
JSP có một cơ chế dùng lại mã là các thành phần JavaBean kết hợp với
scriplet. Tuy nhiên với JavaBean có một bất lợi là xây dựng phức tạp và khó
quản lý.
Các custom action làm dịu được vấn đề này bằng cách mang lại các lợi
ích dưới góc độ khác của việc module hố tính sử dụng lại cho các trang JSP.
Các custom action gói gọn lại các tác vụ để chúng có thể được dùng lại trong
hơn một ứng dụng và tăng hiệu xuất bằng cách khuyến khích phân chia cơng
việc giữa các nhà phát triển thư viện và người sử dụng thư viện. Các tag
library của JSP được tạo bởi các nhà phát triển, là người thành thạo ngơn ngữ
lập trình Java và là chun gia trong giao tiếp với cơ sở dữ liệu và các dịch vụ
khác. Các tag library được dùng bởi các nhà thiết kế ứng dụng web, là người
có thể chỉ tập trung vào cách thức hiển thị hơn là quan tâm đến cách truy cập
cơ sở dữ liệu và các dịch vụ khác.
Một số đặt tính của các custom tag là:
- Chúng có thể được tuỳ biến thơng qua các thuộc tính từ một trang
đang gọi.
- Chúng được phép truy cập vào tất cả đối tượng có sẵn trong trang JSP.
- Chúng có thể thay đổi lời đáp mà được phát sinh bởi một trang đang
gọi.
- Chúng có thể được lồng với nhau và cho phép các tương tác phức tạp
trong một trang.
- Chúng có thể truyền thơng với nhau. Chúng ta có thể tạo và khởi tạo
một thành phần JavaBean, tạo một biến tham chiếu đến Bean đó trong một tag
và sau đó sử dụng Bean này trong tag khác.
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 18

á
á
c
ct
t
a
a
g
g
s
st
t
r
r
o
o
n
n
g
gJ
J


b
b
á
á
o
oc
c
á
á
c
ct
t
a
a
g
gl
l
i
i
b

2
.
.C
C
á
á
c
cl
l
o
o


i
it
t
a
a
g
g


c
ct
t
a
a
g

đ
ơ
ơ
n
ng
g
i
i


n
n
a
g
gc
c
ó
ót
t
h
h
u
u


c
ct
t
í
í
n
n
h

u


c
ct
t
í
í
n
n
h
hP
P
h
h
ư
ư
ơ
ơ
n
n
g
g


h
u
u
y
y


n
nc
c
h
h
u
u


i
iboolean or Boolean
java.lang.Boolean.valueOf(String)

byte or Byte
java.lang.Byte.valueOf(String)

char or Character

3
.
.C
C
á
á
c
ct
t
a
a
g
gc
c
ó
ón
n


á
c
ct
t
a
a
g

đ


n
n
h
hn
n
g
g
h
h
ĩ

hb
b


n
nMột tag có thể định nghĩa ra một biến mà biến này được dùng trong cùng
một trang. Ví dụ sau đây minh hoạ cách thức định nghĩa và sử dụng một biến
chứa một đối tượng được trả về.
i
i
i
i
.
.K
K
ế
ế
t
t
<tlt:tag2 name=’obj1’/>
Trong ví dụ kết tiếp, dùng các tag lồng nhau tương tự như trong XML và
HTML.
<tlt:outerTag>
<tlt:innerTag />
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 20
<tlt:outerTag>
i
i
i
i
i
i
.

Đ


n
n
h
h
 Phát triển tag handler và các lớp trợ giúp cho tag.
 Khai báo tag trong bộ mơ tả thư viện tag (tag library descriptor) dưới
dạng tập tin XML.
 Tạo tập tin JSP có sử dụng custom tag.
Phần này mơ tả các thuộc tính của tag handler và các bộ mơ tả thư viện
tag, cũng trình bày cách phát triển tag handler và các element của bộ mơ tả
thư viện đối với mỗi loại tag được giới thiệu trong phần trước.
I
I
I
I
.
.
3
3
.
.T
T
a
a
g
gh
h
a


i
it
t
a
a
g
gh
h
a
a
n
n
d
d
l
l
e
e
r
r

cc
c


n
nx
x

ửl
l
ý
ý

Simple
doStartTag, doEndTag, release
Attributes
doStartTag, doEndTag, set/getAttribute1 N
Body, No Interaction

.
.T
T
a
a
g
gl
l
i
i
b
b
r
r
a
a
r
r
y
yd
d

<! a tag library descriptor >
<taglib>
<tlibversion> <! Phiên bản của thư viện tag >
<! Phiên bản của JSP mà tag handler phụ thuộc >
<jspversion>
<! Tên mặt định đơn giản có thể dùng bởi cơng cụ tạo trang JSP
để tạo tên với giá trị gợi nhớ; chẳng hạn shortname có thể được
dùng như giá trị tiếp đầu ngữ thích hợp trong taglib directive
và/hoặc tạo ra các tiếp đầu ngữ cho các id >
<shortname>
<uri> <! URI duy nhất xác định tag library >
<info> <! Thơng tin mơ tả về tag library >
<tag> </tag> </taglib>
Tag element u cầu đối với mọi tag để xác định một lớp có
trong thư viện tag.
<tag>
<tagclass>classname</tagclass>

</tag>
I
I
I
I
.
.
5
5
.
.


T
a
a
g
gh
h
a
a
n
n
d
d
l
l
e
e
r
rLUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 22
Đối với các tag đơn giản chỉ cần cài đặt hai phương thức của giao tiếp
Tag là doStartTag và doEndTag. doStartTag được triệu gọi khi JSP container
gặp start tag, nó trả về SKIP_BODY vì thân tag chẳng có nội dung nào cả.

De
e
l
l
e
e
m
m
e
e
n
n
t
tCác tag mà khơng có thân phải khai báo nội dung của thân là rỗng.
helloworld.tld
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"
<! Nếu có JSP v1.2 thì đổi lại
" >
<! a tag library descriptor >
<taglib>
<tlibversion>1.0</tlibversion>


p
p
a
a
g
g
e
e
hello.jsp
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html>
<head>
hello.jsp (tiếp theo)
<%@ taglib uri = "helloworld.tld" prefix = "vandau" %>
<title>
<vandau:helloWorld />
</title>
<! stylesheet để hiển thị các tag như h1, … >
<link rel = "stylesheet" href ="JSP-Styles.css" type =
"text/css"/>
</head>
<body>
<h1><vandau:helloWorld /></h1>

a
g
gc
c
ó
ót
t
h
h
u
u


c
ct
t
í
í
n
n
h

c
á
á
c
ct
t
h
h
u
u


c
ct
t
í
í
n
n
h
ht

e
r
r
.
.Đối với mỗi thuộc tínch của tag, chúng ta phải định nghĩa theo phong
cách của JavaBean, tức là phải có phương thức get/set[Attribute] trong tag
handler.
Hãy nhớ rằng, nếu thuộc tính được đặt tên là id và tag handler kết thừa
từ lớp TagSupport thì chúng ta khơng cần định nghĩa các phương thức
get/set[Attribute] bởi vì những thứ này đã được TagSupport làm sẵn.
Lớp tag handler sẽ được cài đặt như sau:

HelloWorldTag.java
public HelloWorldTag extends TagSupport {
private String name = “World.”;
public void setName(String name) {
this.name = name;
}
LUẬN VĂN TỐT NGHIỆP Khóa 1998-2003 SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 24
public int doStartTag() throws JspException {
try {
pageContext.getOut().print("Hello " + name);
} catch (Exception ex) {
throw new JspTagException("HelloWorldTag: " +

e
n
n
t
tĐối với mỗi thuộc tính chúng ta phải xác định thuộc tính nào được u
cầu (bắt buộc) và giá trị nào có thể được xác định bởi biểu thức. Nếu thuộc
tính của tag khơng bắt buộc thì tag handler nên cung ấp giá trị mật định.
TLD cho tag handler ở trên như sau:

TLD file (overwrite helloworld.tld)
<! đoạn này tương tự như mục 1) >
<tag>
<name>helloWorld</name>
<tagclass>HelloWorldTag</tagclass>
<info>Ví dụ với tag đơn giản nhất</info>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<! ‘EMPTY’ is insensitive case >
<bodycontent>EMPTY</bodycontent>
</tag>
-
-
SVTH: Phan Văn Đấu GVHD: Nguyễn Hồng Quang Trang 25
<title> Tag With Attributes </title>
<! stylesheet để hiển thị các tag như h1, … >
<link rel = "stylesheet" href ="JSP-Styles.css" type =
"text/css"/>
</head>
<body>
<h1><vandau:helloWorld name = "TH 40" /></h1>
<vandau:helloWorld name = "TH40" />
</body>
</html>
I
I
I
I
.
.
5
5
.
.
2
2
.
.C
C
á

u
n
n
g
g-
-T
T
a
a
g
gh
h
a
a
n
n
d
d
l
l
e

Ví dụ sau đọc nội dung của thân, chuyển nội dung đó, và sau đó ghi lại
những thay đổi vào luồng xuất.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status