You are on page 1of 30

Tm hiu Servlet

1. Gii thiu v Servlet


Hin nay, trong lp trnh c mt xu hng rt quan trng ang c tp trung pht trin
ng dng, l xy dng cc chng trnh dch v Java pha my ch (Server).
Servlet l thnh phn chnh c s dng pht trin cc chng trnh dch v Java
pha my ch. Cc Servlet l cc chng trnh Java thc hin cc ng dng Server
(tn gi Servlet cng gn ging nh Applet pha my Client) tr li cho cc
yu cu ca Client. Cc Servlet khng b rng buc cht vi mt giao thc ClientServer c th no c, nhng giao thc thng c s dng l HTTP, do vy, khi ni ti
Servlet ngha l ni ti HTTP Servlet. Servlet l s pht trin m rng ca CGI
m bo Server thc hin c cc chc nng ca mnh. Ta c th s dng Servlet ca
Java tu chnh li mt dch v bt k, nh Web Server, Mail Server, v.v.
Web Server hin th cc t liu c vit trong HTML v hi p cho yu cu ca ngi
s dng qua HTTP. Cc t liu HTML cha cc vn bn c nh du (nh dng) cc
trnh duyt nh IE, Netscape c c.
Mt trnh duyt chp nhn u vo dng HTML, khi ngi s dng nhn mt nt yu
cu mt s thng tin no , mt Servlet n gin c gi x l cc yu cu .
Cc cng vic chnh ca Servlet c m t khi qut trong hnh 1, bao gm:
c cc d liu tng minh c Client gi n t cc yu cu (d liu theo cc
khun dng form data).
c cc d liu khng tng minh c Client gi n t cc yu cu (d liu
trong phn u ca yu cu request headers).
X l v lu tr cc d liu c cung cp di dng HTML.
Gi tr li d liu tng minh cho Client (dng HTML), cung cp cc ni dung
ng, v d tr li yu cu Client v cc cu truy vn vo cc CSDL.
Qun l cc thng tin trng thi v tr li d liu khng tng minh cho Client
(cc m trng thi v cc phn u ca tr li).
JDBC
Client

Servlet

JNI
RMI

HTTP
Servlet
Web Server

XML

CSDL
Chng trnh ng dng
Chng trnh Java
Chng trnh B2B
...

Hnh 1 Vai tr ca Servlet


Vit mt Servlet l tng i d. Ta ch cn c Tomcat, n l t hp ca Java Server
PagesTM 1.1 v Servlets 2.2.
Tomcat c th np min ph t
http://java.sun.com/products/jsp/tomcat/, phn ci t s c m t phn sau.
Cc Servlet cng c s dng thay cho kch bn giao din cng chung CGI Script.
Khi to ra mt trang Web, ta cng s to ra mt ng dng Web.
Trc khi s dng Servlet to ra cc ng dng Web, chng ta i tm hiu xem c
nhng kh nng la chn no khc pht trin nhng ng dng Web.
CGI: Theo cch thng thng, b sung cc chc nng vo cho mt Web Server
ngi ta hay s dng Common Gateway Interface (CGI), mt giao din c lp vi ngn
ng cho php mt Server khi ng mt tin trnh ngoi nhn thng tin c yu
cu thng qua cc bin mi trng. Mi yu cu c tr li bi mt tin trnh ring
thng qua mt i din ring ca mt chng trnh CGI hoc bi mt kch bn CGI
(thng c vit bng ngn ng thng dch nh Perl).

Fast CGI: Open Marked pht trin mt chun khc thay cho CGI c gi l
Fast CGI. Fast CGI hnh ng ging nh CGI. N khc ch, Fast CGI to
ra mt tin trnh bn vng cho tng chng trnh.
Mt s chng trnh ng dng khc nh ASP v Java Script cng h tr to
ra cc ng dng Web. ASP c Microsoft pht trin to ra cc ni dung cho
cc trang Web ng. Trong ASP, trang HTML c th nhng nhng phn nh c
vit bng VBScript hoc JScript. Netscape a ra k thut c gi l
JavaScript, cho php a cc phn m lnh nh nhng vo trang HMTL, nhm
to ra nhng ni dung Web ng mt cch linh hat hn. Ngoi ra, Netscape cn
cung cp NSAPI, Microsoft a ra ISAPI cho cc Web Server ca h.
Servlet c mt s u im so vi CGI:
Mt Servlet khng lm vic trong mt tin trnh ring. iu ny loi b c
vic phi to ra qu nhiu tin trnh mi cho mi yu cu.
Mt Servlet s thng trc trong b nh gia cc yu cu, trong khi cc chng
trnh CGI cn phi ti xung v c khi ng cho tng yu cu CGI.

Ch cn mt Servlet tr li ng thi cho tt c cc yu cu. iu ny cho php tit


kim c b nh v m bo n d dng qun l c d liu mt cch thng nht.

Mt Servlet c th thc hin bi mt Servlet Engine trong phm vi kim sot


Sandbox m bo an ton trong vic s dng cc Servlet.

Cc lp Servlet ca Java c th c np t ng m rng cc chc nng ca


Server. Cc Servlet ca Java thc hin bn trong JVM. Chng c m bo an ton
v chuyn i tng thch gia cc h iu hnh v gia cc Server vi nhau. iu ny
khc vi cc Applet, Servlet ch thao tc c trong min ca mt Server.
Servlet API c pht trin da trn nhng im mnh ca Java platform nhm
gii quyt vn ca CGI v Server API. N l mt API n gin, h tr tt c cc
Web server v thm ch cho php cc ng dng my ch dng kim tra v qun l
cc cng vic trn Server. N gii quyt vn thc thi bng vic thc hin tt c cc
yu cu nh cc lung Thread trong qu trnh x l, hoc vic cn bng ti trn mt
Server trong cc cm my tnh Cluster. Cc Servlet d dng chia s ti nguyn vi
nhau.
Trong nh ngha Servlet, vn bo mt c ci tin theo nhiu cch. Trc ht, bn
him khi thc thi c cc cu lnh trn Shell vi d liu cung cp bi ngi dng m
Java API cung cp vi nhng kh nng truy cp n tt c cc hm thng dng. Bn
c th s dng Java Mail c v gi mail, kt ni vo cc CSDL (thng qua JDBC),
tp lp (.class) v nhng lp lin quan truy cp h thng tp, CSDL, RMI, CORBA,
Enterprise Java Beans (EJB),

2. u im ca Servlet
Servlet c s dng thay th cho nhng cng ngh Web ng. Vic s dng
Servlet mang li nhng li th:
D di chuyn. Servlet c vit bng Java nn n c tnh di ng cao, thc hin
c trn nhiu h iu hnh, trn cc Web Server khc nhau. Khi nim Vit
mt ln, chy mi ni cng rt ng vi Servlet.
Mnh m. Servlet h tr rt hiu qu cho vic s dng cc giao din li API nh
lp trnh mng, x l a lung, x l nh, nn d liu, kt ni cc CSDL, bo mt,
x l phn tn v triu gi t xa RMI, CORBA, v.v. N cng thch hp trao i
tin, truyn thng gia Client v Server mt cch bnh thng.
Hiu qu. Servlet c tnh hiu qu cao. Mt khi c ti v, n s c lu li
trong b nh ca my ch. Servlet duy tr cc trng thi ca n, do vy nhng
ti nguyn ngoi nh vic kt ni vi CSDL cng s c lu gi li.
An ton. Bi v Servlet c vit bng Java nn n k tha c tnh an ton
ca Java. C ch t ng dn rc v vic khng s dng con tr ca Java gip
cho Servlet thot khi nhiu cng vic qun l b nh. ng thi n x l cc
li rt an ton theo c ch x l ngoi l ca Java.

Tnh tch hp. Cc Servlet c tch hp vi cc Server. Chng cng tc vi


cc Server tt hn cc chng trnh CGI.
Tnh linh hot. Cc Servlet hon ton mm do. Mt HTTP Servlet c s
dng to ra mt trang Web, sau ta c th s dng th <Servlet> a n
vo trang Web tnh, hoc s dng vi cc Servlet khc lc ra cc ni dung cn
thit.

3. Mi trng thc hin Servlet


Cc Servlet thng l s m rng (k tha) cc lp chun Java trong gi
javax.servlet (cha cc khun mu c bn ca Servlet) v javax.servlet.http
(m rng cc khun mu c bn ca Servlet v cc yu cu theo HTTP).
Servlet l mt lp Java v v th cn c thc thi trn mt my o Java (JVM) v
bng mt dch v c gi l m t Servlet (Servlet Engine). Servlet Engine
ti lp Servlet ln u tin n c yu cu, hoc ngay khi Servlet Engine c bt
u. Servlet ngng ti x l nhiu yu cu khi Servlet Engine b tt hoc n b
dng li.
Nh vy, dch v thc hin cc Servlet, vic c cc Servlet l cha , m cn
phi c mt m t Servlet kim tra v trin khai chng. Hin nay mt s m t
tng thch vi nhiu loi Web Server khc nhau, nhng nguyn l hnh ng tng i
ging nhau. Ngi ta chia chng thnh ba loi.
M t Servlet n
M t Servlet gp
M t Servlet nhng.
3.1 M t Servlet n
y l loi Server c xy dng h tr cho cc Servlet. u im ca n l mi
th lm vic vi cc hp kt qu u ra rt phong ph. Tuy nhin, n c nhc im l ta
phi ch nhng phin bn mi ca Web Server nhn c nhng h tr mi nht cho
Servlet. Hin nay c cc loi m t n sau:
Java Server Web Development (JSWDK) ca Sun Microsystem: c vit hon
ton bng Java: http://java.sun.com.products/servlet/. N c s
dng nh l mt Server c lp kim tra cc Servlet v cc trang JSP trc
khi pht trin thnh mt Web Server thc s.
Jagsaw Server ca WWW Consortium, cng c vit bng Java. Chi tit hn,
xem http://www.w3.org/Jigsaw.

Netscape Enterprise Server. y l Web Server rt ni ting, n h tr xy


dng Servlet.

Lotus Domino Go WebServer. Mt loi Web Server khc cng h tr xy dng


Servlet.
3.2 M t Servlet gp
Servlet gp l loi m t c vit cho nhiu loi Server khc nhau, k c Apache,
Fast Track Server, Enterprise Server ca Netscape, Personal Web Server, v.v.
Hin nay c cc loi sau:

Apache Tomcat: M t ny h tr thm cho Apache. N c s dng nh l


mt Server c lp kim tra cc Servlet v cc trang JSP, hoc c tch
hp vo Apache Web Server, http://java.sun.com.products/servlet/.

.Jrun ca Live Software: Jrun l m t cho Servlet v JSP, h tr y


Servlet API trong cc Web Server ph bin trn mi h iu hnh,
http://www.allaire.com.products/jrun/.
WebSphere Application Server ca IBM: cn c gi l ServletExpress.
ServletExec ca New Atlanta: ServletExec l m t cho Servlet v JSP, h
tr y Servlet API trong cc Web Server ph bin trn mi h iu hnh,
http://newatlanta.com/.
3.3 M t Servlet nhng
Loi m t ny c th nhng vo phn mm ng dng khc. Hin nay c cc loi sau:
Java Server Engine ca Sun. y l loi m t c vit hon ton bng Java v l
Web Server u tin h tr y cho cc c t ca Servlet 2.1 v JSP 1.0,
http://www.sun.com.software/jwebserver/try.
Nexus Web Server ca Anders Kristensen. N c th d dng nhng vo cc
chng trnh ng dng Java.

4. Kin trc ca Servlet


Gi javax.servlet cung cp cc giao din v cc lp xy dng cc Servlet. Kin
trc ca chng c m t nh sau.

Servlet

GenericServlet
HttpServlet

MyServlet

Hnh 6.3 Kin trc ca Servlet


4.1 Giao din Servlet
Giao din Servlet l mt khi nim tru tng trung tm trong Servlet API. Tt c
cc Servlet u ci t trc tip hoc gin tip giao din ny hoc m rng (k tha)
nhng lp ci t n.
Giao din ny khai bo ba phng thc nh ngha vng i ca Servlet.
public void init(ServletConfig config) throws ServletException
Phng thc ny c gi mt ln khi Servlet c ti vo trong Servlet
Engine, trc khi Servlet c yu cu x l mt yu cu no . Phng
thc init() c mt thuc tnh l i tng ca ServletConfig, v Servlet c
th c cc i s khi to ca n thng qua i tng ServletConfig. Chng
thng c nh ngha trong mt tp cu hnh. Mt v d thng thng ca mt
i s khi to l nh danh database cho mt CSDL.
...
private String databaseURL;
public void init(ServletConfig config) throws ServletException {
super.init(config);
databaseURL = config.getInitParameter("database");
}

public void service(ServletRequest request, ServletResponse response)


throws ServletException, IOException

Phng thc ny c gi x l cc yu cu. N c th khng c gi, gi


mt ln hay nhiu ln cho n khi Servlet c ngng ti. Nhiu Thread (mi
Thread cho mt yu cu) c th thc thi phng thc ny song song, v th n tr
nn an ton v hiu qu hn.

public void destroy()

Phng thc ny ch c gi mt ln trc khi Servlet c ngng ti v sau


khi kt thc cc dch v.
Servlet API c cu trc Servlet c th cho php b sung mt giao thc khc vi
HTTP. Gi javax.servlet cha cc lp v cc giao din c k tha giao din
Servlet mt cch c lp. Gi javax.servlet.http cha cc lp v giao din HTTP
c th.
4.2. Lp c s HttpServlet
Nh ta bit, theo giao thc HTTP, d liu c trao i gia my ch Server v cc
my Client theo mt trong hai phng thc GET hay POST. Java nh ngha mt lp c
tn l HttpServlet trong goi javax.servlet truyn v nhn d liu theo c hai
phng thc trn.
Lp tru tng HttpServlet cung cp mt khung lm vic x l cc yu cu GET,
POST ca giao thc HTTP. HTTPServlet k tha giao din Servlet cng vi mt s cc
phng thc hu dng khc.
Mt tp cc phng thc trong HTTPServlet l nhng phng thc xc nh dch v
trong giao din Servlet. Vic b sung dch v trong HTTPServlet ging nh mt kiu
ca cc yu cu c x l (GET, POST, HEAD, ) v gi mt phng thc c th cho
mi kiu. Bng vic lm ny, cc nh pht trin Servlet s an tm khi x l chi tit
nhng yu cu nh HEAD, TRACE, OPTIONS, v c th tp trung vo nhng yu
cu thng dng hn nh GET v POST.
HTTP sinh ra cc trang HTML v ta c th nhng cc Servlet vo mt trang HTML.
Khi c mt yu cu c gi ti, u tin n phi ch ra lnh cho HTTP bng cch gi
mt phng thc tng ng. Phng thc ny ch cho Server bit kiu hnh ng m
n mun thc hin.
Khi c mt Client gi ti mt yu cu, Server s x l yu cu nhn c v gi tr
li kt qu cho Client. Hai phng thc doGet() v doPost() c s dng chung
nhn v gi tin trong cc Servlet.
Mt Servlet bt k, v d MyServlet phi k tha HttpServlet v vit t nht mt
trong cc phng thc doGet() thc thi thao tc GET ca HTTP, hay doPost()
thc thi thao tc POST ca HTTP.
Trong v d u tin, chng ta s vit phng thc doGet() dng
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
...
}

Phng thc doGet() c hai tham s i tng thuc hai lp HttpServletRequest v


HttpServletResponse (c hai lp ny c nh ngha trong javax.servlet.http).
Hai i tng ny cho php chng ta truy cp y tt c cc thng tin yu cu v cho
php gi d liu kt qu cho Client tr li cho yu cu .
Vi CGI, cc bin mi trng v stdin c s dng nhn thng tin v yu cu, tuy
nhin vic t tn cc bin mi trng c th khc nhau gia cc chng trnh CGI, v
mt vi bin c th khng c cung cp bi tt c cc Web Server.
i tng HttpServletRequest cng cung cp thng tin ging nh bin mi trng
ca CGI nhng theo mt hng chun. N cng cung cp nhng phng thc m ra
cc tham s HTTP t dy cc cu truy vn hoc t ni dung ca yu cu ph thuc vo
kiu yu cu (GET hay POST).
V d 1 Chng trnh FirstServlet m v hin th s ln n c truy cp.
package myservlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet{
int i = 0;
public void doGet(HttpServletRequest re, HttpServletResponse resp)
throws ServletException, IOException{
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
i++;
out.println("So lan duoc truy cap: " + i);
out.close();
}
}

doGet(HttpServletRequest req, HttpServletResponse resp) s dng i s


th nht req c cc phn u, tiu (header) ca HTTP gi ti (v d nh d liu
dng HTML m ngi dng nhp vo), v s dng resp xc nh dng tr li cho
HTTP (xc nh kiu ni dung trao i, t Coookie). iu quan trng nht l phi nhn
c mt i tng ca PrintWriter
( java.io) thng qua
resp.getWriter() gi kt qu tr li cho Client. Ngoi doGet(), doPost()
HttpServlet cn c cc phng thc:
service(): thc hin khi i tng ca lp c to lp v triu gi doGet()
hoc doPost().
doPut(): thc hin thao tc PUT ca HTTP.
doDelete(): thc hin thao tc DELETE ca HTTP.

init() v destroy(): khi to v hu b cc Servlet.


getServletInfo(): nhn cc thng tin v Servlet.
Lu : C doGet() v doPost() u c th pht sinh ra mt trong hai ngoi l
ServletException, hay IOException, do vy ta phi khai bo chng nh trn.
Ngoi ra, mt iu na chng ta cng ch l hai phng thc doGet() v doPost()
s c phng thc service() gi thc hin v i lc ta c th vit
service() thay cho hai phng thc trn.

5. Chu trnh sng ca cc Servlet


Mi Servlet u c chu trnh sng nh sau:
Server np v khi to Servlet
Servlet x l cc yu cu ca cc Client
Server hu b Servlet khi khng cn cn thit.
Np v
M Servlet

Server

Client

Server
X l yu cu

M Servlet

Server

Client

M Servlet

Hu b

Chu trnh sng ca Servlet


Nh trn phn tch, mi Servlet u c mt chu trnh sng nht nh. N c khi
to (np v), x l cc yu cu ca Client v sau khi hon tt cc dch v th b Server
hu b (Hnh 6.4).
5.1 Khi ng Servlet
Vic khi ng mt Servlet c thc hin mc nh bi HttpServlet. khi ng
mt Servlet ring, ta phi vit phng thc init().
public class MyServlet {
public void init() throws ServletException{

// Khi to cc gi tr ban u
}
. . .
}

Khi mt Server np xong mt Servlet th n gi init() bt u Servlet .


Lu : Server ch gi init() mt ln khi np Servlet v sau s khng gi li na,
tr khi phi np li n. Server khng th np li nu Servlet cha b hu b bi li
gi destroy(). Phng thc init() c th c np chng theo mu
public void init(ServletConfig config) throws ServletException

nh nu trn.
5.2 Tng tc vi cc Client
Lp HttpServlet x l cc yu cu ca Client thng qua cc dch v ca n. Cc
phng thc trong HttpServlet x l yu cu ca Client u c hai i s:
Mt l i tng ca HttpServletRequest, bao gm c d liu t Client. N
cho php nhn c cc tham s m Client gi n nh mt phn ca cc yu
cu,
thng
qua
cc
phng
thc
getParameterName(),
getParameterValue() xc nh tn gi v gi tr ca cc tham s.
Hai l i tng ca HttpServletResponse, bao gm c d liu hi p cho
Client. HttpServletResponse cung cp hai phng thc tr li kt qu cho
Client. Phng thc getWriter() ghi d liu di dng vn bn cn
getOutputStream() cho li d liu dng nh phn.
Ngoi ra, x l c cc yu cu ca HTTP gi n cho mt Servlet th phi m
rng lp HttpServlet v vit cc phng thc x l cc yu cu nh doGet(),
doPost().
5.3 Hu b Servlet
Sau khi np cc Servlet v x l chng xong th cn phi dn dp h thng, loi b
nhng Servlet khng cn c s dng tip. Phng thc destroy() ca lp
HttpServlet c s dng loi b mt i tng Servlet khi n khng cn cn
thit. loi b mt ti nguyn no c th trong mt Servlet ring th phi vit
phng thc destroy().
Server s gi destroy() hu mt Servlet, sau khi n kt thc tt c cc dch v
theo yu cu. V d sau y m t mt Servlet m mt kt ni vi CSDL thng qua
phng thc init() v sau n s b ph hu bi phng thc destroy().
public class DBServlet extends HttpServlet{

Connection connection = null;


public void init() throws ServletException{
// M mt kt ni vi CSDL
try{
databaseUrl = getInitParameter(databaseUrl);

// c tn ngi s dng v mt khu


connection = DriverManager.getConnection(
userName, password);
}catch(Exception e){
throw new UnavailableException(this,
Khng m c CSDL);
}

//
public void destroy(){

// ng cc kt ni dn dp b nh
connection.close();
connection = null;

}
Server s gi destroy() sau khi tt c cc dch v c kt thc.

6. X l cc yu cu
Nhim v ca cc Servlet l nhn cc yu cu, x l chng v tr li cho cc Client.
6.1 Truy tm thng tin
xy dng thnh cng mt WebSite, ta cn c nhng thng tin t Server, ni thc
hin cc Servlet. Servlet c nhng phng thc sau gip cho vic nhn c nhng
thng tin yu cu.
int port = req.getServerPort(): Xc nh cng trao i tin ca my ch.
public String ServletConfig.getInitParameter(String name): Cho
li gi tr ban u ca tham s c tn name.
public Enumeration ServletConfig.getInitParameterName(): Xc
nh dy lit k tn gi ca tt c cc tham s khi u ca Servlet nh l i
tng ca Enumeration. Lp GenericServlet s dng phng thc ny
truy cp n cc Servlet.
V d Servlet sau in ra tn v gi tr ban u ca tt c cc tham s.
import
import
import
public

java.io.*;
javax.servlet.*;
java.util.*;
class ReadServlet extends GenericServlet{

public void service(ServletRequest re, ServletResponse resp)

throws IOException{
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.println("Tham so khoi dau la:");
Enumeration eno = getInitParameterNames();
while(eno.hasMoreElements()){
String nm = (String)eno.nextElement();
out.println(nm + " : " + getInitParameter(nm));
}
}
}

6.2 Gi thng tin


Cc Servlet cn phi tr li cho Client v cc thng tin di dng HTML bao gm:
Cc m hin trng. M hin trng l mt s nguyn, n m t tnh trng ca vic
hi p thnh cng hay tht bi. Phn ln cc m ny c nh ngha trong lp
HttpServletResponse nh bng 6.1.
S cc phn u (tiu ) ca HTTP. Phng thc setHeader() ca lp
HttpServletResponse cho php t li cc gi tr cho cc tiu .
Ni dung hi p. Ni dung hi p di dng mt trang HTML.
Bng 6.1
Tn gi nh

M s

Thng bo

SC_OK

200

Ok (tt)

SC_NO_CONTENT

204

Khng c ni dung

SC_MOVED_PERMANENTLY

301

chuyn i vnh vin

SC_MOVED_TEMPORARLY

302

chuyn i tm thi

SC_NOT_FOUND

404

Khng tm thy

SC_UNAUTHORIZED

401

Khng c php

V d Servlet gi cho Client mt trang ngu nhin trong danh sch cc trang Web
ca n.
// RandomSend.java
import
import
import
import

java.io.*;
javax.servlet.*;
javax.servlet.http.*;
java.util.*;

public class RandomSend extends HttpServlet{

Vector st = new Vector();


Random rd = new Random();
public void init(ServletConfig config) throws ServletException{
super.init(config);
st.addElement("http://www.yahoo.com");
st.addElement("http://www.hotmail.com");
st.addElement("http://www.zednet.com");
st.addElement("http://www.java.sun.com");
}
public void doGet(HttpServletRequest re, HttpServletResponse res)
throws IOExceptio{
res.setContentType("text/html");
PrintWriter out = resp.getWrite();
int siteIndex = Math.abs(rd.nextInt()) % st.size();
String st = (String) st.elementAt(siteIndex);
res.setStatus(res.SC_MOVED_TEMPORARLY);
res.setHeadr("Location", st);
}
}

Khi mt Client dng HTML gi i mt yu cu th n c th s gi i mt s cc tiu


(Header).
Vic c cc tiu l tng i n gin, c th s dng hm getHaeder() ca
HttpServletRequest nhn c cc tiu (header) yu cu. Sau y l cc tiu
ph dng trong cc yu cu.
Accept: Cc kiu tp c trnh duyt chp nhn, nh cc tp image/gif,
image/jpeg, hay application/msword, v.v.
Accept-Charset: Tp cc k t m trnh duyt mong i.
Accept-Encoding: Cc kiu m ho d liu (v d gzip) m trnh duyt bit
cch gii m.
Accept-Language: Ngn ng m trnh duyt mong i.
Authorization: Thng tin v giy php, u quyn.
Connection: Khng nh c kt ni thng xuyn hay khng? Nu mt
Servlet t l Keep-Alive th n c th tn dng c nhng u th ca c
ch kt ni thng xuyn.
Content-Length: S d liu c a vo yu cu.
Cookie: Mt trong cc tiu quan trng nht. Mt Cookie l mt xu (dy k
t) c gi ti cho mt Client bt u mt phin lm vic.
Host: My ch v cng c ch ra trong URL.

User-Agent: Loi trnh duyt.


Cc tiu trn l tu chn, tr Content-Length l c yu cu ch i vi yu cu
POST.
tm mt tiu c th, trc tin ta cn s dng getHaederNames() c c mt
dy (i tng ca Enumeration) tt c cc tiu nhn c t mt yu cu c th,
sau tm ln lt tiu .
Mt vn na cn bit khi phi tm cc tiu ca mt yu cu l phi bit thng tin v
phng thc chnh c s dng. Phng thc getMethod() s cho ta bit v phng
thc chnh ca mi yu cu (thng l GET, POST, hoc cng c th l HEAD, PUT v
DELETE). Phng thc getRequestURI() s cho li URI (mt phn ca URL, phn
ng sau tn ca a ch my ch vi cng kt ni v trc phn d liu mu).
V d Xy dng mt Servlet c v hin th mt bng cc tiu v ni dung ca
mt yu cu.
// ShowRequestHeaders.java
package myservlet;
import
import
import
import

java.io.*;
javax.servlet.*;
javax.servlet.http.*;
java.util.*;

/* Ch ra tt c cc tiu ca mt yu cu c th di dng mt bng bao gm tiu v ni


dung
*/
public class ShowRequestHeaders extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Servlet Example: Showing Request Headers";
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"
+ "<HTML>\n" + "<HEAD><TITLE>" + title +
"</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<B>Request Method: </B>" +
request.getMethod() + "<BR>\n" +
"<B>Request URI: </B>" +
request.getRequestURI() + "<BR>\n" +
"<B>Request Protocol: </B>" +
request.getProtocol() + "<BR><BR>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Header Name<TH>Header Value");

Enumeration headerNames = request.getHeaderNames();


while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
out.println("<TR><TD>" + headerName);
out.println("
<TD>" + request.getHeader(headerName));
}
out.println("</TABLE>\n</BODY></HTML>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

Sau y l hai kt qu hin th i vi hai loi trnh duyt Netscape v Internet Explore.

Hnh 6.5 Hin th cc tiu yu cu vi Netscape

Hnh 6.6 Hin th cc tiu yu cu vi IE

6.3 X l cc d liu mu
Khi s dng my tm kim Web Search Engine, bn c th truy cp dng
http://host/path?user=Marty+Hall&orgin=bwi&dest=lax
Phn tin sau du ? (user=Marty+Hall&orgin=bwi&dest=lax) c xem nh l d
liu mu, y l cch chung thng c s dng chng trnh Server nhn d liu
vo t trang Web.
Vic tch nhng thng tin cn thit t d liu dng trn l mt phn vic m cc chng
trnh CGI thng lm.
Trc tin, c d liu vo cho cc tham s yu cu ca GET hoc POST
Sau , cht ra tng cp du & ri li tch tip xc nh tn ca cc tham
bin (phn bn tri du =) v gi tr ca nhng tham bin (phn bn phi ca
du =).
Thc hin gii m URL theo nhng gi tr .
Lu : Tt c cc ch ci, ch s c gi i v khng thay i, nhng du cch c
chuyn thnh du +. Nhng k t khc c chuyn thnh %XX, trong XX l gi tr
(hex) ca k t ASCII (khc vi ch ci, ch s). V d, nu bn mun nhp vo d liu
mu ~hall, ~gates vo trng vn bn c tn user dng HTML th d liu gi
i phi l user=%7Ehall%2C+%7Egates.
Nhng cng vic nhm chn trn khi lp trnh vi CGI c Java h tr x l cc
d liu mu mt cch t ng. n gin l bn gi getParameter() ca
HttpServletRequest nhn c tn gi ca tham s nh l mt i s. D liu mu
c gi i trong GET v POST l ging ht nhau. Khi mt tham s c nhiu hn mt gi
tr th gi getParameterValues() thay v gi getParameter(), kt qu tr li l
mng cc xu. Tng t, s dng getParameterName() xc nh tp cc tn gi ca
cc tham s, kt qu ca n l danh sch cc tn gi thuc lp Enumeration.
V d Chng trnh c v hin th cc tham s c gi n cho Servlet qua GET hay
POST.
// ShowParameters.java
package hall;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
/** Hin th tt c cc tham s c gi n cho Servlet qua GET hoc POST. Cc tham s
c bit c th * khng c gi tr hoc c nhiu gi tr.

*/

public class ShowParameters extends HttpServlet {


public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading All Request Parameters";
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0
Transitional//EN\">" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Parameter Name<TH>Parameter Value(s)");
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.println("<TR><TD>" + paramName + "\n<TD>");
String[] paramValues = request.getParameterValues(paramName);

if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.print("<I>No Value</I>");
else

out.print(paramValue);
} else {
out.println("<UL>");
for(int i=0; i<paramValues.length; i++) {
out.println("<LI>" + paramValues[i]);
}
out.println("</UL>");
}
}
out.println("</TABLE>\n</BODY></HTML>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

chng trnh Servlet trn nhn c cc tham s th cn phi c mt trang HTML gi


chng. Trang HTML (PostForm.html) sau y s dng POST gi d liu (theo cc mu
forms c cc mc u vo), th hin cc gi tr m Servlet nhn c theo c hai
phng thc doGet() v doPost().
Tp PostForm.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>A Sample FORM using POST</TITLE>
</HEAD>

<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">A Sample FORM using POST</H1>
<FORM ACTION="/servlet/hall.ShowParameters"
METHOD="POST">
Item Number:
<INPUT TYPE="TEXT" NAME="itemNum"><BR>
Quantity:
<INPUT TYPE="TEXT" NAME="quantity"><BR>
Price Each:
<INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR>
<HR>
First Name:
<INPUT TYPE="TEXT" NAME="firstName"><BR>
Last Name:
<INPUT TYPE="TEXT" NAME="lastName"><BR>
Middle Initial:
<INPUT TYPE="TEXT" NAME="initial"><BR>
Shipping Address:
<TEXTAREA NAME="address" ROWS=3 COLS=40></TEXTAREA><BR>
Credit Card:<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Visa">Visa<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Master Card">Master Card<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Amex">American Express<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Discover">Discover<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Java SmartCard">Java SmartCard<BR>
Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR>
Repeat Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Submit Order">
</CENTER>
</FORM>
</BODY>
</HTML>

Hnh 6.7 Trang PostForm.html

Hnh 6.8 Chng trnh c cc tham s ShowParameters.java

7. Cc phin lm vic Session


Session c s dng duy tr s kt ni gia Client v Server. Khi trnh duyt
yu cu Web Server cung cp mt trang ti liu, n thit lp mt kt ni, ly v ni dung
ca trang yu cu v sau hu b kt ni ngay lp tc. lu li du vt cc trng
thi m trnh duyt yu cu thc hin trc , Web Server ci t sn i tng ca
HttpSession. HttpSession da vo khi nim Cookie qui nh gia Server v
Client. Cookie l mt mu tin c gi cho trnh duyt Client khi c yu cu v
mt trang tin. Mi khi trnh duyt gi mt yu cu cho Server, n li chuyn mu tin
Cookie tr li cho Server. Da vo cc Cookie m chng trnh Server v Client
c c nhng thng tin trng thi thng bo cho nhau.
Giao din HttpSession c 3 phng thc thng xuyn s dng:
public void setAttribute(String name, Object value) throws
IllegalStateException: Kt hp mt tn kho vi gi tr ca bin.

public Object setAttribute(String name) throws IllegalStateException: Tr


v i tng tng ng vi thuc tnh c tn l name.
public void removeAttribute(String name) throws IllegalStateException:
Loi b thuc tnh c tn l name.
s dng Session, ta thc hin nh sau:
Nhn v mt i tng (ca HttpSession) cho ngi s dng bng cch gi
phng thc getSession() i vi i tng ca lp HttpServletRequest.
HttpSession userSession = request.getSession();
Lu tr v nhn d liu t Session. Giao din cung cp nhng phng thc
t li gi tr cho cc thuc tnh hoc xc nh chng nh nu trn.
V d 7.1 Servlet thc hin lu tr v c d liu t mt Session.
import
import
import
import
import
import
import
import
import

java.io.IOException;
java.io.PrintWriter;
java.util.Date;
java.util.Enumeration;
javax.servlet.ServletException;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
javax.servlet.http.HttpSession;

public class SessionServlet extends HttpServlet {


public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body bgcolor=\"white\">");
out.println("<head>");
String title = "Session Example";
out.println("<title>" + title + "</title>");
out.println("</head>");
out.println("<body>");
// img stuff not req'd for source code html showing
// relative links everywhere!

// XXX
// making these absolute till we work out the
// addition of a PathInfo issue
out.println("<a href=\"../sessions.html\">");
out.println("<img src=\"../images/code.gif\" height=24 "
+
"width=24 align=right border=0 alt=\"view
code\"></a>");
out.println("<a href=\"../index.html\">");
out.println("<img src=\"../images/return.gif\" height=24
" +
"width=24 align=right border=0
alt=\"return\"></a>");
out.println("<h3>" + title + "</h3>");
HttpSession session = request.getSession(true);
out.println("Session ID:" + " " + session.getId());
out.println("<br>");
out.println("Created:" + " ");
out.println(new Date(session.getCreationTime())

"<br>");
out.println("Last Accessed:" + " ");
out.println(new Date(session.getLastAccessedTime()));
String dataName = request.getParameter("dataname");
String dataValue = request.getParameter("datavalue");
if (dataName != null && dataValue != null) {
session.setAttribute(dataName, dataValue);
}
out.println("<P>");
out.println("The following data is in your session:" +
"<br>");
Enumeration names = session.getAttributeNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String value = session.getAttribute(name).toString();
out.println(HTMLFilter.filter(name) + " = "
+ HTMLFilter.filter(value) + "<br>");
}
out.println("<P>");
out.print("<form action=\"");
out.print(response.encodeURL("SessionServlet"));
out.print("\" ");

out.println("method=POST>");
out.println("Name of Session Attribute:");
out.println("<input type=text size=20 name=dataname>");
out.println("<br>");
out.println("Value of Session Attribute:");
out.println("<input type=text size=20 name=datavalue>");
out.println("<br>");
out.println("<input type=submit>");
out.println("</form>");
out.println("<P>GET based form:<br>");
out.print("<form action=\"");
out.print(response.encodeURL("SessionServlet"));
out.print("\" ");
out.println("method=GET>");
out.println("Name of Session Attribute:");
out.println("<input type=text size=20 name=dataname>");
out.println("<br>");
out.println("Value of Session Attribute:");
out.println("<input type=text size=20 name=datavalue>");
out.println("<br>");
out.println("<input type=submit>");
out.println("</form>");
out.print("<p><a href=\"");
out.print(response.encodeURL("SessionExample?
dataname=foo&datavalue=bar"));
out.println("\" >URL encoded </a>");
out.println("</body>");
out.println("</html>");
out.println("</body>");
out.println("</html>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doGet(request, response);
}
}
Lp HTMLFilter
public final class HTMLFilter {

/**
* Filter the specified message string for characters that
are sensitive
* in HTML.
This avoids potential attacks caused by
including JavaScript
* codes in the request URL that is often reported in error
messages.
*
* @param message The message string to be filtered
*/
public static String filter(String message) {
if (message == null)
return (null);
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuffer result = new StringBuffer(content.length +
50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '<':
result.append("&lt;");
break;
case '>':
result.append("&gt;");
break;
case '&':
result.append("&amp;");
break;
case '"':
result.append("&quot;");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
}

8. S truyn thng gia cc Servlet


Cc Servlet c nhiu cch trao i tin vi nhau. Chng cn trao i vi nhau v:
Mt Servlet c th truy cp trc tip n cc Servlet c np v v cn
chng thc hin mt s cng vic no . Mt Servlet s dng i tng ca
ServletContext nhn tin t cc Servlet khc.
public Servlet ServletContext.getServlet(String name)
throws ServletException

Mt Servlet c th s dng li nhng kh nng ca Servlet khc thc hin


mt nhim v no .
Hai hoc nhiu Servlet cn chia s thng tin vi nhau.
Ta c th s dng phng thc getServlets():
public Enumeration ServletContext.getServlets()

ly v cc i tng Servlet c np v t ng cnh Servlet hin thi


ServletContext.

V d Chng trnh sau m t s trao i tin gia cc Servlet vi nhau.


// InterServlet.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InterServlet extends HttpServlet{
public void doGet(HttpServletRequest re, HttpServletResponse res)
throws IOException{
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
ServletContext ct = getServletContext();
Enumeration num = ct.getServletNames();
out.println("<HTML>");
out.println("<HEAD><TITLE>Demo Servlet </TITLE></EAD>");
out.println("<h3>!!Warning </h3>");
out.println("getServletNames() ----");
try{
while(num.hasMoreElement()){
String nm = (String)num.nextElement();
out.println(nm);
Servlet s = ct.getServlet(nm);
out.println("Servlet Name: " + nm);
out.println("Servlet classe: " + s.getClass().getName());
out.println("Servlet Information: " + s.getServletInfo());
out.println();

}
}catch(Exception e){
System.out.println("Error: " + e);
}
}
}

9. Servlet kt ni cc c s d liu
Cc WebSite ngy nay khng ch hin th nhng thng tin ca cc trang HTML tnh. V
d, trong thng mi in t, mt lnh vc ang thnh hnh trn th gii, khch hng c
th vo mt trang Web bn hng, chn nhng mt hng cn mua, in vo phiu mua
hng sau thanh ton (bng cc phng thc tr tn phiu, check, chuyn khon, v.v.)
th s nhn c cc mt hng theo yu cu. Nh vy, cc thng tin chi tit v khch hng
phi c lu tr trong CSDL my dch v thc hin c cc dch v thng mi
in t. Trong nhng kch bn nh th, cc Website phi c kt ni vi cc CSDL
khc.
Servlet v JDBC l hai cng c rt hiu qu cho ngi lp trnh ng dng Web kt ni
Web vi CSDL.
9.1 Vai tr ca Servlet trong m hnh kt ni CSDL
Cc chng trnh ng dng trn mng hin nay ang chuyn t m hnh
Client/Server sang m hnh ba tng, hoc n-tng. Trong m hnh ba tng, Client
khng thc hin truy vn trc tip cc CSDL m thng qua tng trung gian Server
truy vn vo cc CSDL.
HTTP, RMI,
Client

(Biu din o)

Giao thc CSDL

Tng trung gian

Server CSDL

JDBC

(Logic nghip v)

Hnh 6.5 M hnh chng trnh ng dng ba tng


M hnh ba tng c u im l n tch ring phn biu din o ( pha Client) ra khi
phn logic nghip v (tng trung gian) v d liu th Server. Do vy, n cho php
nhiu Client c th truy cp vo cng mt d liu, cng mt nghip v v nhiu loi
chng trnh Java thc hin nh chng trnh ng dng c lp, chng trnh Applet
hay chng trnh Web. Servlet c mt v tr quan trng trong vic truy cp vo CSDL
tng trung gian. V d, hy tng tng c mt chng trnh t mua hng trn mng.
Nu khng c tng trung gian th chng trnh ny phi kt ni trc tip vi CSDL trn
my ch v my ch phi ghi li n hng, cp nht li cc trng d liu trong CSDL

(tr i nhng mt hng bn theo n t mua). Chng trnh ca khch c th b ngt


nu Server ca CSDL b thay i theo mt cch no . Hoc c th mt ai can thip
vo chng trnh ca khch, Server nhn c n t hng nhng khng nhn c s
thanh ton ca khch, mc d khch hng thc hin thanh ton theo n t hng, v.v.
Tng trung gian s dng logic nghip v tru tng ho qu trnh x l t hng. N
nhn thng tin t n t hng, kim tra tnh xc thc ca th tn dng, ti khon, v.v, v
chuyn nhng thng tin cho h CSDL. Khi h CSDL thay i th tng trung gian s
c cp nht m khng lm nh hng n chng trnh ca khch. Ngoi ra, tng
trung gian cn gip ta tng hiu qu x l cng vic v n h tr kt ni cho vi
nhiu h CSDL khc nhau.
9.2 X l giao dch vi JDBC
S truyn thng gia Client v tng trung gian thng s dng HTTP (khi ngi s
dng dng Web Browser), RMI (khi ngi s dng dng phn mm ng dng hay
Applet triu gi t xa nh cp chng II). B iu khin kt ni JDBC c s
dng qun l s trao i thng tin gia tng trung gian v CSDL.
JDBC l giao din vi SQL, mt giao din vi hu nh tt c cc CSDL m hnh d liu
quan h hin i.
Ta hy xt tip chng trnh t mua hng trc tuyn. Khch hng in vo n t mua
v gi n cho Ca hng (h thng bn hng trc tuyn). CSDL ca h thng phi c
cp nht v chn thm bn ghi thng tin v khch hng . Tng t, sau khi giao dch
mua/bn kt thc th mt s bng trong h CSDL cng s phi c cp nht.
Nhng vn trn c cc cu lnh ca SQL thc hin. i tng ca lp Connection
c s dng qun l cc giao dch vi JDBC.
V d Ta hy xy dng mt chng trnh ng dng thi gian thc c s dng Servlet.
thc hin v d ny, mc nh l ta bit s dng HTML v Microsoft FrontPage
to lp cc trang Web.
Chng ta hy xt bi ton nh sau: Sao Mai l cng ty cho bn v cho thu t. H bn,
cho thu cc t gia nh v cc t ch khch cho cc tua du lch. Cng ty mun thnh
lp mt cu lc b cng vi mt Website: CarSaoMai.com thc hin cc dch v trc
tuyn nu trn.
tham gia c vo CarSaoMai.com th bn phi in vo mt th ng k gia nhp
cu lc b v ch nhng ngi ng k mi c cung cp cc dch v trc tuyn
mua v s dng t. Nhng ngi cha ng k th ch c quyn truy cp bit
c nhng thng tin v Cng ty v nhng thng tin tm tt v cc dch v m Cng ty
cung cp.
Trc tin, ta hy thit k qu trnh ng k nh sau.
To ra trang HTML cha mu ng k.

Cp nht li CSDL v cc Servlet lm vic tng trung gian khi c mt ngi


mi ng k.
To ra mt CSDL chnh lu tr thng tin v cc thnh vin ca cu lc b.
To ra Servlet khc cho php tt c cc thnh vin cu lc b kt ni c
vo Website v c phc v.
1. Thit lp CSDL
u tin, ta c th s dng Microsoft Access to ra mt CSDl nh, v d
carsSaoMai.mdb. s dng CSDL ny, ta s dng 32-bit ODBC (chn trong
Control Panel\Administrative Tools\Data Sources (ODBC)). Sau khi m
c hp thoi ODBC Data Sources Administrator, hy chn System DSN v nhn
vo nt Add a thm CSDL mi vo ngun d liu. Nhp tn CSDL carsSaoMai vo
trng Data Source Name v nhn vo Selection thit lp ng dn ti th mc
cha tp carsSaoMai.mdb.
carsSaoMai.mdb c hai bng c thit k nh sau.
(i) Bng Login
Tn trng

Kiu d liu

Cc rng buc

LogName

Text(20)

Kho nguyn thu

Passwd

Text(20)

Khng rng

(ii) Bng Memebers: lu tr cc thnh vin cu lc b


Tn trng

Kiu d liu

Cc rng buc

LogName

Text(20)

Kho tham chiu

FName

Text(30)

Khng rng

LName

Text(30)

Khng rng

Age

Number(2)

Khng rng

Gender

Text(10)

Khng rng

Address

Text(30)

Khng rng

City

Text(30)

Khng rng

PIN

Number(7)

Khng rng

EMail

Text(30)

Khng rng

Phone

Number(10)

Khng rng

Salary

Number(20)

Khng rng

2. To lp trang ch v mu ng k cu lc b
Ta c th to ra cc trang HTML cho trang ch v cc mu ng k c thit k
Lu li trang Web trn vo tp carsSaoMai_HomePage.shtm. Tp ny c thm dng
lnh:
<servlet code = http://128.28.10.1:8080/servlet/pageValidator.class>
</servlet>
Servlet pageValidator.class cng vi mt phn m HTML s to ra Servlet
pha my ch. Lu l cn phi thay i a ch URL ti URL ca Web Server ca bn.
Tp carsSaoMai_HomePage.shtm c cc im lin kt ti cc trang HTML bao gm:
SaoMai.html: trang cha cc thng tin v cu lc b.
member.html: ghi nhn cc thnh vin ng k vo cu lc b
getRegisteredNow.html v registrationContD.html: cho php cc
thnh vin mi ng k vo cu lc b.
3. Vit cc Servlet cho tng trung gian
carsSaoMai.com s dng cc Servlet nhn c cc thng tin t Client
Browser, thm nh thng tin ny, tng tc vi CSDL chn cc bn ghi mi, tm
trong CSDL nhng thnh vin ng k v thc hin cc dch v m cc thnh vin cu
lc b yu cu. l cc Servlet:
NewRegistry v MamberDetailEntry: ghi nhn nhng thnh vin mi.
RegisteredMemeber: tm trong CSDL nhng thnh vin ng k v truy
cp xc nh nhng thng tin cn thit.
4. Dch v thc hin chng trnh ng dng
Tm li, vic to lp mt trang Web (din n) p ng cc yu cu trn, ta thc hin cc
bc nh sau:
To ra mt CSDL carsSaoMai.mdb, v truy cp c vo n th phi cho bit
tn v mt khu ca ngi ng k tham gia Cu lc b. CSDL ny c hai bng
Login v Memebers.
Chuyn tt c cc tp HTML m Website yu cu vo th mc, v d
public_html ca JavaWebServer. ng thi chuyn cc tp nh vo th mc
ny. Nh l phi thay i URL cho thch hp nh nu trn.
Tip theo, chuyn cc tp lp c dch (.class) ca cc chng trnh
Servlet np vo th mc Servlet ca JavaWebServer. y cng cn nh
l phi thay i URL ch ra trong cc tp .java trc khi dch v chuyn
chng v th mc \JavaWebServer2.0\servlets.

Khi ng Java Web Server bng cch thc hin httpd.exe th mc Web
server\bin.
Khi Web Server hnh ng, hy m trnh duyt ca bn v g vo
http://localhost:8080/SaoMai_homepage.shtml
Nu trang Web ny cha c np v th thay localhost trong URL trn bng
a ch IP my ca bn, v d:
http://128.28.10.1:8080/SaoMai_homepage.shtml
Tng t nh trn nu ta mun thc hin trn Web Server.

You might also like