Đồ án Ngôn ngữ cài đặt website

ĐỒ ÁN:  
NGÔN NGỮ CÀI ĐẶT  
WEBSITE  
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à  
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 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  
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  
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>  
<jsp:scriptlet>  
Java code  
<% Scriptlets %>  
</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  
jsp:setProperty  
jsp:include  
Tên thuộc tính  
name và value  
Page  
jsp:forward  
jsp:param  
Page  
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  
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  
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  
Webserver khởi động lại để giải phóng rác trong bộ nhớ tăng hiệu suất thực  

Tải về để xem bản đầy đủ

pdf 126 trang yennguyen 31/01/2025 10
Bạn đang xem 30 trang mẫu của tài liệu "Đồ án Ngôn ngữ cài đặt website", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfdo_an_ngon_ngu_cai_dat_website.pdf