Tải bản đầy đủ (.doc) (115 trang)

Đồ án công nghệ thông tin ứng dụng công nghệ JSP

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (734.05 KB, 115 trang )

Ph n Iầ
GI I THI U V NGÔN NG CÀI TỚ Ệ Ề Ữ ĐẶ
Ch ng Iươ
C N B N V JSPĂ Ả Ề
JavaServer Pages (JSP) là m t k thu t server-side do đó chúng ta khôngộ ỹ ậ
th th c hi n b t k hành đ ng nào client. JSP cho phép chúng ta tách thànhể ự ệ ấ ỳ ộ ở
ph n đ ng c a trang ra kh i thành ph n t nh HTML. R t đ n gi n, chúng taầ ộ ủ ỏ ầ ĩ ấ ơ ả
ch c n vi t m t tài li u HTML bình th ng r i sau đó bao quanh mã c aỉ ầ ế ộ ệ ườ ồ ủ
thành ph n đ ng trong các ầ ộ tag đ c bi t, h u h t các ặ ệ ầ ế tag b t đ u v i <% và k tắ ầ ớ ế
thúc v i %>. Ví d , đây là m t ph n c a trang JSP, có k t qu tr v làớ ụ ộ ầ ủ ế ả ả ề
“Thanks for reading Van Dau book.” v i URL là ớ
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 yê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 yê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 .ổ ợ ầ ủ ọ ứ ụ
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ướ ế ệ ộ
công ngh đ c s d ng trong ng d ng v i các công ngh khác.ệ ượ ử ụ ứ ụ ớ ệ
I. So sánh JSP v i các công ngh khác.ớ ệ
I.1. JSP v i ASPớ
ASP là công ngh t ng đ ng t Microsoft. JSP có ba l i th so v iệ ươ ươ ừ ợ ế ớ
ASP.
- Ph n đ ng đ c vi t b ng Java, ch không ph i b ng các ngôn ngầ ộ ượ ế ằ ứ ả ằ ữ
script nh VBScript, JavaScript. Vì th nó m nh m h n t t h n đ i v i cácư ế ạ ẽ ơ ố ơ ố ớ
ng d ng ph c t p c n các thành ph n s d ng l i.ứ ụ ứ ạ ầ ầ ử ụ ạ
- JSP ch y đ c trên nhi u h đi u hành và web servers khác nhau ngayạ ượ ề ệ ề
c v i IIS c a Microsoft (c n có plugins t Webphere, JRun, )ả ớ ủ ầ ừ
- H tr s m r ng tag v i custom tag.ỗ ợ ự ở ộ ớ
I.2. JSP v i PHPớ
L i đi m c a JSP v i PHP c ng nh v i ASP. JSP đ c vi t b ngợ ể ủ ớ ũ ư ớ ượ ế ằ
Java mà chúng ta đã bi t v i các API m r ng cho m ng, truy c p c s dế ớ ở ộ ạ ậ ơ ở ữ
li u, các đ i t ng phân tán, … trong khi v i PHP đòi h i chúng ta ph i h c cệ ố ượ ớ ỏ ả ọ ả
m t ngôn ng m i.ộ ữ ớ
II. Các thành ph n script c a JSP.ầ ủ
Các th b c mã trong JSP cho phép chúng ta chèn mã vào ẻ ọ servlet mã s đ cẽ ượ
phát sinh t trang JSP. Có ba d ng sau:ừ ạ
Bi u th c có d ng <%= expressions %>, đ c đ nh giá tr và chèn vàoể ứ ạ ượ ị ị
lu ng xu t c a ồ ấ ủ servlet.
Scriptlet có d ng <% code %>, đ c chèn vào ph ng th c ạ ượ ươ ứ _jspService
c a ủ servlet (đ c g i là ượ ọ service).
Khai báo có d ng <%! code %>, đ c chèn vào thân c a l p ạ ượ ủ ớ servlet, nh làư

các field c a l p thông th ng.ủ ớ ườ
Template text
Template text
Trong 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 hai, n u chúng ta mu n có chú thích trong JSP mà không có trong tàiứ ế ố
li u k t qu , dùng:ệ ế ả
<% JSP comments %>
Chú thích HTML có d ng:ạ
<! HTML comments >
thì đ c chuy n qua tài li u HTML thông th ng.ượ ể ệ ườ
Cú pháp XML
Cú pháp XML
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>
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 hoá 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 ngoà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 yêu c u (request). Nó cho phép chúng ta truy c p vào các tham s c aộ ầ ậ ố ủ
request nh lo i ư ạ request (GET, POST, …) và các incoming HTTP header
(cookies).
response
Có ki u là ể javax.servlet.http.HttpServletResponse, có ph m vi toàn trangạ
(page). Chú ý r ng vì lu ng xu t thì th ng làm v t đ m cho nên vi c gán mãằ ồ ấ ườ ậ ệ ệ
tình tr ng c a HTTP và ạ ủ response header thì h p lý trong JSP, m c dù đi u nàyợ ặ ề
thì không đ c phép trong ượ servlet m t khi đã có lu ng xu t nào đ c g i đ nộ ồ ấ ượ ở ế
client.
out
Có ki u ể javax.servlet.jsp.JspWriter và ph m vi trong m t trang (page).ạ ộ
Dùng đ g i các thông xu t đ n client. i t ng ể ở ấ ế Đố ượ out đ c dùng th ng xuyênượ ườ
trong scriptlets, các bi u th c t đ ng đ c đ a vào lu ng xu t nên hi m khiể ứ ự ộ ượ ư ồ ấ ế
c n tham chi u đ n đ i t ng này.ầ ế ế ố ượ
session
Có ph m vi trong m t phiên truy n (session) và ki u t ng ng làạ ộ ề ể ươ ứ
javax.servlet.http.HttpSession. G i v các phiên truy n đ c t o t đ ng vìọ ề ề ượ ạ ự ộ
th bi n này v n còn k t n i ngay c ch ng có m t tham chi u incomingế ế ẫ ế ố ả ẳ ộ ế
session nào. M t ngo i l là n u chúng ta s d ng thu c tính ộ ạ ệ ế ử ụ ộ session c aủ
page directive đ t c các phiên truy n, mà l i c tham chi u đ n bi n ể ắ ề ạ ố ế ế ế session
thì s gây ra các l i vào lúc trang JSP đ c d ch thành ẽ ỗ ượ ị servlet.
application
Bi n này có ki u là ế ể javax.servlet.ServletContext, có ph m vi trong toànạ
ng d ng (application). ứ ụ ServletContext l y t m t đ i t ng c u hìnhấ ừ ộ ố ượ ấ

servlet là getServletConfig().getContext(). Các trang JSP có th l u tr d li uể ư ữ ữ ệ
persistent trong đ i t ng ố ượ ServletContext t t h n là trong các bi n th hi n.ố ơ ế ể ệ
ServletContext có các ph ng th c setAttribute và setAttribute mà cho phépươ ứ
chúng ta l u tr d li u ư ữ ữ ệ
config
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 yêu c u) vàự ị ị ễ ở ờ ượ ầ
do đó có đ y đ quy n truy c p các thông tin c a yêu c u này. Ví d sau đây môầ ủ ề ậ ủ ầ ụ
t ngày/gi mà trang đ c yê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();
out.println(“Current time:” + new java.util.Date());
Bi u th c nh là giá tr trong elements khác.ể ứ ư ị
Bi u th c có th đ c s d ng trong các thu c tính c a các elementsể ứ ể ượ ử ụ ộ ủ
khác. Giá tr t các bi u th c này s đ c tính vào th i gian yêu c u (requestị ừ ể ứ ẽ ượ ờ ầ
time). Các elements cho phép s d ng bi u th c trong các thu c tính c a chúngử ụ ể ứ ộ ủ
là:
Tên Element Tên thu c tínhộ
jsp:setProperty name và value
jsp:include Page
jsp:forward Page
jsp:param Value
II.3. JSP scriptlets
Scriptlets là nh ng đo n mã có ch a b t k mã Java nào n m gi a “<%” vàữ ạ ứ ấ ỳ ằ ữ
“%>”. N u chúng ta mu n th c hi n th gì đó ph c t p h n là ch chèn vào m tế ố ự ệ ứ ứ ạ ơ ỉ ộ
bi u th c đ n gi n thì JSP ể ứ ơ ả scriptlets cho phép chúng ta thêm b t k đo n mãấ ỳ ạ
Java nào vào trang JSP. Các scriptlets này đ c đ a vào ph ng th c ượ ư ươ ứ _jspService
(mà đ c g i b i ượ ọ ở service) c a ủ servlet. Có cú pháp:
<% Java Code %>
II.4. Khai báo trong JSP
M t khai báo trong JSP cho phép chúng ta đ nh ngh a các ph ng th cộ ị ĩ ươ ứ
ho c các tr ng (bi n) có ph m vi toàn trang. Khai báo s đ c chèn vào trongặ ườ ế ạ ẽ ượ
l p c a ớ ủ servlet (bên ngoài ph ng th c ươ ứ _jspService đ c g i b i ượ ọ ở service để
x lý m t yêu c u). M t khai báo có d ng sau:ử ộ ầ ộ ạ
<%! 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 quá 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 ngoà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”/>

<jsp:include page = “Footer.jsp” flush = “true”/>
III.3. Chuy n tham s b ng th <jsp:param>ể ố ằ ẻ
Khi nhúng trang b ng th <jsp:include> b n có th chuy n tham s choằ ẻ ạ ể ể ố
trang đ c nhúng đ nh n đ c k t xu t linh đ ng h n b ng cách s d ng thượ ể ậ ượ ế ấ ộ ơ ằ ử ụ ẻ
con <jsp:param>.
Ví dụ
testParam.jsp

<jsp: include page = “testParam2.jsp” flush = “true”>
<jsp:param name = “greeting” value = “Welcome”/>
<jsp:include>
<%
out.println (“Goi tham so t test1.jsp”);ừ
%>
testParam2.jsp
<%
String param = request.getParameter (“greeting”);
out.println (“Goi tham so tu test2.jsp”);
out.println (“param: “ + param);
%>
III.4. Chuy n ti p n trang khác v i th <jsp:include>ể ế đế ớ ẻ
Chúng ta s d ng th <jsp:forward> đ tri u g i và chuy n d li u choử ụ ẻ ể ệ ọ ể ữ ệ
trang jsp khác x lý. Trong ví d sau chúng ta có 3 trang JSP. Trang th nh tử ụ ứ ấ
hi n th form đ ng nh p yêu c u nh p vào tên username và password. Trangể ị ă ậ ầ ậ
th hai ki m tra: n u username, password trùng v i username, passwordứ ể ế ớ
cho 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 yê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 {
%>
<jsp:include page = “login.jsp” flush = “true”>
<jsp:param name = “sError” value = “Ban nhap lai username &
password”/>
<jsp:include>
<%}%>
</html>
thongbao.jsp
<html>
Ban dang nhap voi usernam: <%=request.getParameter
(“username”)%>
Password: <%=request.getParameter (“password”)%>
</html>
III.5. Thẻ jsp:plugin

Ph ng cách đ n gi n nh t đ s d ng ươ ơ ả ấ ể ử ụ jsp:plugin là cung c p cho nó b nấ ố
thu c tính: ộ type, code, width, height. Chúng ta đ nh giá tr “applet” cho thu cị ị ộ
tính type và ba thu c tính còn l i s d ng gi ng nh APPLET ộ ạ ử ụ ố ư tag bình
th ng. V i ngo i l là các ườ ớ ạ ệ action thì có cú pháp XML nên các thu c tính trong nóộ
c ng ph i theo qui c XML. Ví d v i APPLET ũ ả ướ ụ ớ tag trong HTML
<APPLET CODE=“MyApplet.class”
WIDTH=457 HEIGHT=350>
</APPLET>
s d ng ử ụ jsp:plugin action nh sau:ư
<jsp:plugin type=“applet”
code=“MyApplet.class”
width=“457” height=“350” />
Ngoà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.ể
III.6. Th jsp:fallbackẻ
III.6. Th jsp:fallbackẻ
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>
III.7. Chuy n trangể
III.7. Chuy n trangể
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 soá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ị ậ ị ỉ ằ
bi n ng m đ nh ế ầ ị session nên đ c n i k t v i session hi n hành. Giá tr “false”ượ ố ế ớ ệ ị
có ngh a r ng ch ng có session nào đ c s d ng t đ ng và n u c truy c pĩ ằ ẳ ượ ử ụ ự ộ ế ố ậ
vào bi n ế session s tr l i vào lúc trang đ c d ch thành ẽ ả ỗ ượ ị servlet.
buffer
Thu c tính này xác đ nh kích th c c a vùng đ m đ c s d ng b i bi nộ ị ướ ủ ệ ượ ử ụ ở ế
out. Có d ng sau:ạ
<%@ page buffer=“none | sizekb” %>
Thu c tính này có giá tr m t đ nh là “8kb”, giá tr “none” ch ng có vùngộ ị ậ ị ị ẳ
đ m nào đ c c p và t t c d li u xu t s đ c ghi tr c ti p quaệ ượ ấ ấ ả ữ ệ ấ ẽ ượ ự ế
ServletResponse, PrintWriter.
autoFlush
Xác đ nh li u lu ng xu t có vùng đ m đ c t đ ng flush (giá tr “true”ị ệ ồ ấ ệ ượ ự ộ ị
m t đ nh) khi vùng đ m đ y hay s tung ra m t ngo i l khi vùng đ m trànậ ị ệ ầ ẽ ộ ạ ệ ệ
(“false”).
Chú ý r ng s không h p lý n u đ t ằ ẽ ợ ế ặ autoFlush=“false” khi
buffer=“none”.
isThreadSafe
Xác đ nh m c đ an toàn c a ti u trình (thread) đ c cài đ t trong trangị ứ ộ ủ ể ượ ặ
(v i giao ti p ớ ế SingleThreadModel), “true” là giá tr m t đ nh.ị ậ ị
info
nh ngh a m t chu i có th truy xu t t Đị ĩ ộ ỗ ể ấ ừ servlet b ng ph ng th cằ ươ ứ

getServletInfo().
<%@ page info=“Some Message” %>
errorPage
Thu c tính này xác đ nh m t trang JSP nên b t k các ngo i l nào đ cộ ị ộ ấ ỳ ạ ệ ượ
tung ra nh ng không b t ngo i l này trong trang hi n hành.ư ắ ạ ệ ệ
<%@ page errorPage=“Ralative URL” %>
Ngo i l tung ra s có s n trong bi n ng m đ nh ạ ệ ẽ ẵ ế ầ ị exception.
isErrorPage
Xác đ nh trang JSP hi n th i có th ho t đ ng nh m t trang l i choị ệ ờ ể ạ ộ ư ộ ỗ
m t trang JSP khác. Giá tr “false” là m t đ nh cho thu c tính này.ộ ị ậ ị ộ
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”.
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()ể ướ ớ ớ
Ngoà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
IV.1. Khái ni mệ
Servlet là các thành ph n đ i t ng nhúng trên trình ch Web server th cầ ố ượ ủ ự
hi n x lý yêu c u và sinh ra các trang Web đ ng tr v máy khách. s d ngệ ử ầ ộ ả ề Để ử ụ
đ c Servlet chúng ta c n có các trình ch hi u Java và h tr tri u g iượ ầ ủ ể ỗ ở ệ ọ
Servlet nh Apache, Jrun, Web Logic ….ư
Ví d sau là m t Servlet c b nụ ộ ơ ả
import javax.servlet.*;
import java.io.*;
public class helloWorldServlet extends GnericServlet
{
public void service (ServletRequest request, ServletResponse
response) throws IOException
{
response.setContextType (“text/html”);
PrintWriter out = response.getWriter ();
out.println (“<html>”);
out.println (“<body>”);
out.println (“<h1> Hello World Servlet! </h1>”);
out.println (“</body>”);
out.println (“</html>”);
}
}
IV.2. Các ph ng th c x lý c b n c a Servletươ ứ ử ơ ả ủ
L p GenericServlet là ph n cài đ t t ng quát cho đ c t giao ti pớ ầ ặ ổ ặ ả ế
(interface) mang tên Servlet. Theo đ c t c a giao ti p Servlet do Sunặ ả ủ ế
đ a ra m t servlet c b n c n có nh ng ph ng th c ph c v cho cácư ộ ơ ả ầ ữ ươ ứ ụ ụ

nhu c u kh i t o (init), ho t đ ng và ph c v (service), h y (destroy),ầ ở ạ ạ ộ ụ ụ ủ
tr v thông 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 quá 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 ();

Conn = DriverManager.getConnection (strConn);
}
}
IV.2.2. Ph ng th c ph c v service ()ươ ứ ụ ụ
public void service (ServletRequest req, ServletResponse res) throws
IOException
Sau khi ph ng th c init () đã hoàn t t, trình ch Web server s tri uươ ứ ấ ủ ẽ ệ
g i đ n ph ng th c ph c v service (). Ph ng th c này đ c xem là trungọ ế ươ ứ ụ ụ ươ ứ ượ
tâm x lý c a servlet mà chúng ta c n ph i cài đ t. Khi trình ch n p servlet vàoử ủ ầ ả ặ ủ ạ
b nh , ph ng th c init () ch đ c g i duy nh t m t l n trong ph ngộ ớ ươ ứ ỉ ượ ọ ấ ộ ầ ươ
th c service () có th đ c tri u g i nhi u l n ng v i m i yêu c u servletứ ể ượ ệ ọ ề ầ ứ ớ ỗ ầ
phát sinh t trình duy t phía máy khách. Bên trong ph ng th c service () chúngừ ệ ươ ứ
ta có th s d ng đ i t ng tham s ServletRequest và ServletResponse để ử ụ ố ượ ố ể
ti p nh n d li u t trình khách chuy n lên và k t xu t k t qu ph n h i trế ậ ữ ệ ừ ể ế ấ ế ả ả ồ ở
l i trình khách.ạ
Ví d :ụ
public void service (ServletRequest request, ServletResponse
response) throws IOException
{
response.setContextType (“text/html”);
PrintWriter out = response.getWriter ();
out.println (“<html>”);
out.println (“<body>”);

}
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 nguyên 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 ngoà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. Quá 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ọ ẹ
N p servletạ
Tùy theo đi u ki n, m t servlet có th n p vào b nh 3 th i đi m khácề ệ ộ ể ạ ộ ớ ở ờ ể
nhau: khi server kh i đ ng, khi ng oi qu tr yêu c u ho c khi trình duy tở ộ ừ ả ị ầ ặ ệ
tri u g i servlet t máy khách. H u h t các Web server đi u cho phép b nệ ọ ừ ầ ế ề ạ
ch n danh sách servlet s đ c u tiên n p lúc Web server kh i đ ng. Tuy t nọ ẽ ượ ư ạ ở ộ ố
ít th i gian h n nh ng sau đó servlet đã trong tr ng thái s n sàng có th ph c vờ ơ ư ạ ẵ ể ụ ụ
trình khách b t k lúc nào.ấ ỳ

Kh i t o servletở ạ
Trình ch Web server kh i t o servlet b ng cách g i đ n ph ng th củ ở ạ ằ ọ ế ươ ứ
init () mà servlet cài đ t. Ph ng th c này ch g i m t l n duy nh t. Chúng ta cóặ ươ ứ ỉ ọ ộ ầ ấ
th l i d ng c h i này đ kh i t o các bi n toàn c c mà servlet s s d ngể ợ ụ ơ ộ ể ở ạ ế ụ ẽ ử ụ
sau này.
Th c thi servletự
Khi trình duy t ho c các trang JSP tri u g i servlet thông qua đ a chệ ặ ệ ọ ị ỉ
URL, trình ch Web server s chính th c g i servlet th c thi thông qua cácủ ẽ ứ ọ ự
ph ng th c nh doGet (), doPost () ho c service (). Ví d khi chúng ta g iươ ứ ư ặ ụ ọ
tr c ti p servlet t đ a ch URL, ph ng th c doGet () c a servlet s đ cự ế ừ ị ỉ ươ ứ ủ ẽ ượ
g i. N u chúng ta g i servlet thông qua thao tác post cua th <form> thìọ ế ọ ẻ
ph ng th c doPost () s đ c g i. Sau khi các ph ng th c này đ c g iươ ứ ẽ ượ ọ ươ ứ ượ ọ
th c thi xong, servlet v n gi l i trong b nh đ ph c v cho các l n tri uự ẫ ữ ạ ộ ớ ể ụ ụ ầ ệ
g i ti p theo. ây c ng chính là u đi m làm cho servlet th c thi nhanh cácọ ế Đ ũ ư ể ự
ng d ng CGI.ứ ụ
D n d p servletọ ẹ
Servlet không gi l i trong b nh v nh vi n, s đ n lúc c n lo iữ ạ ộ ớ ĩ ễ ẽ ế ầ ạ
servlet kh i b nh . Ví d nh khi nhà qu n tr mu n d ng h th ng, mu nỏ ộ ớ ụ ư ả ị ố ừ ệ ố ố

×