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ỏ ộ ớ ụ ư ả ị ố ừ ệ ố ố