Professional Documents
Culture Documents
Servlet
JNI
RMI
HTTP
Servlet
Web Server
XML
CSDL
Chng trnh ng dng
Chng trnh Java
Chng trnh B2B
...
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.
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.
Servlet
GenericServlet
HttpServlet
MyServlet
Server
Client
Server
X l yu cu
M Servlet
Server
Client
M Servlet
Hu b
// Khi to cc gi tr ban u
}
. . .
}
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{
//
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{
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));
}
}
}
M s
Thng bo
SC_OK
200
Ok (tt)
SC_NO_CONTENT
204
Khng c ni dung
SC_MOVED_PERMANENTLY
301
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.*;
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
java.util.*;
Sau y l hai kt qu hin th i vi hai loi trnh duyt Netscape v Internet Explore.
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.
*/
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);
}
}
<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>
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;
// 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("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}
}
}
}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)
Server CSDL
JDBC
(Logic nghip v)
Kiu d liu
Cc rng buc
LogName
Text(20)
Passwd
Text(20)
Khng rng
Kiu d liu
Cc rng buc
LogName
Text(20)
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
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.