Tài liệu hướng dẫn Servlet cơ bản - Pdf 13

Tài liệu hướng dẫn Servlet cơ bản
Phần 1. Nghiên Cứu Công Nghệ SERVLET
Tuần 1
I. Sơ lược về Servlet
Servlets là tập mã lệnh java được chạy trên ứng dụng web (do đó tên
"Servlets", tương tự như "Applets" trên phía client) để trả lời những yêu cầu
từ phía client.
Servlets sử dụng các chuẩn mỡ rộng của java như class trong gói
javax.servlet và javax.servlet.http. Từ khi Servlets được viết với các ngôn
ngữ cấp cao và kéo theo những framework chuẩn, Chúng cung cấp cách
thức để khởi tạo những yêu cầu phức tạp tinh vi phiá server và phụ thuộc
vào HDH.
HTTP Servlets bao gồm những nội dung chính sau:
* Xử lý và lưu trữ dữ liệu được submit bởi HTML form.
* Cung cấp các ngữ cảnh động, chẳng hạn. trả về kết quả của câu query từ
phía server cho client
1. Kiến trúc của Servlet Application Architecture
2. Cách thức Servlet hoạt động trong Servlet Container
Trang 1
Tài liệu hướng dẫn Servlet cơ bản
A servlet được loaded bởi servlet container lần đầu tiên servlet được requested.
Servlet xử lý các yêu cầu của user request,và trả về cho the servlet container,rồi được gởi
tới người dùng . Sau khi xử lý xong servlet nằm trong memory và đợi cho other requests
Nó chỉ được unloaded khỏi memory chỉ khi servlet container thấy thiếu
memory.Tuy nhiên servlet container luôn so sánh the timestamp của servlet đã load với
servlet class file. Nếu thấy có dấu hiệu bị thay đổi request thì servlet is reloaded into
memory.
3. Mô tả các bước cài đặt và cấu hình Apache tomcat để
chạy Servlet
Hiện tại có rất nhiều servlet containers. Một trong những cái phổ biến nhất là Tomcat.
Một cái khác là JRun với 3 editions: (Developer, Professional, and Enterprise)

Tạo thư mục cần Deployment ví dụ: giaoviec
Trong thư mục giaoviec tạo thư mục WEB_INF
Trong thư mục WEB_INF tạo thư mục classes
Cấu trúc cây thư mục như sau:
Trang 3
Tài liệu hướng dẫn Servlet cơ bản
Khởi tạo Deployment Descriptor
Để chạy một file servlet ví dụ như file HttpRequestDemoServlet thì ta cần phải cấu
hình trong file Web.xml. File này được đặt trong thư mục WEB_INF và có các cú
pháp như ví dụ sau:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Servlet 2.4 Examples</display-name>
<description>
Servlet 2.4 Examples.
</description>

<servlet>
<servlet-name>HttpRequest</servlet-name>
<servlet-class>HttpRequestDemoServlet</servlet-class>
Trang 4
Tài liệu hướng dẫn Servlet cơ bản
</servlet>
<servlet-mapping>
<servlet-name>HttpRequest</servlet-name>
<url-pattern>/servlet/HttpRequestServlet</url-pattern>
</servlet-mapping>

http://localhost:10000/giaoviec/servlet/ TestingServlet
II. Tìm hiểu sâu về cấu trúc Servlet
Trang 5
Tài liệu hướng dẫn Servlet cơ bản
The Interfaces in the javax.servlet Package
Interface Description
Filter Interface này giống như một bộ loc. A filter chặn đứng
một yêu cầu trước khi nó có thể thực hiện thao tác trên
request, response, hoặc cả hai.
FilterChain Servlet container tạo ra một đối tượng FilterChain cung
cấp môt cái nhìn tổng quan lên yêu cầu của một request bị
ngăn chặn thông tin.
FilterConfig Servlet container tạo ra một đối tượng FilterConfig từ
thông tin như tên filter và tham số ban đầu, có thể thu
được.
RequestDispatcher Định nghĩa một đối tượng được phái đi lấy thông tin từ
Servlet hoặc một trang .
Servlet Interface chính của tất cả các servlet phải thực thi trực tiếp
hoặc gián tiếp.
ServletConfig Miêu tả một đối tượng servlet có cấu trúc như thế nào,
như là: tên servlet, tham số ban đầu, và đối tượng
ServletContext , có thể thu được
ServletContext Đối tượng ServletContext interface giữa servlet container
and a servlet. Một đối tượng ServletContext tồn tại trong
mỗi ứng dụng Web thông qua máy ảo Java Virtual
Machine (JVM). Trong những ứng dụng trên JVM, đối
tượng ServletContext có thể sử dụng để chia sẻ thông tin
toàn cục.
ServletContextAttributeListener Một lớp thực thi interface này được sử dụng để nhận
thông báo của sự thay đổi đến thuộc tính của đối tượng

Phương thức khởi tạo init():
public void init(ServletConfig config) throws ServletException
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. Bạn 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 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 đến nguồn dữ liệu
cho Servlet trong phương thức init().
Phương thức phục vụ service():
Trang 7
Tài liệu hướng dẫn Servlet cơ bản
public void service(ServletRequest req, ServletResponse resp) 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à bạn 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 khi 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 servise() bạn có thể sử dụng đối tượng tham số
ServletRequest và ServletReponse để tiếp nhập dữ liệu từ trình khách chuyển lên và
kết xuất kết quả phản hồi lại trình khách.
Phương thức hủy destroy():
Khi Servlet khong còn dùng đến nũa hoặc hết thời gian qui định lưu giữ trong bộ
nhớ của trình chủ WebServer, nó sẽ bị trìnnh chủ giải phóng. Trước khi Servlet bị
hủy phương thức destroy() sẽ được gọi. Nêu nhu bạn dùng phương thức init() để thực
hiện khởi tạo biến cho Servlet thi 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ờ…
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()

Ví dụ về 1 file Web
Bạn hãy tạo một file Web.xml với các thông tin như sau:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
<servlet>
<servlet-name>ConfigDemo</servlet-name>
<servlet-class>ConfigDemoServlet</servlet-class>
<init-param>
<param-name>adminEmail</param-name>
<param-value>[email protected]</param-value>
</init-param>
<init-param>
<param-name>adminContactNumber</param-name>
<param-value>0913739427</param-value>
</init-param>
</servlet>
</web-app>
Lưu lại và bỏ vào trong thư mục giaoviec/Web-INF. Sau đó tạo một Servlet
để lấy thông tin từ Web.xml vừa tạo ra. Lưu Servlet voi tên
ConfigDemoServlet.java biên dịch và bỏ file.class vào thư mục
giaoviec/WEB-INF/classes
3. Chương trình nhận tham số trong Web.xml
ConfigDemoServlet.java
import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException;
public class ConfigDemoServlet implements Servlet {

Thông tin về Servlet context là các thông tin về môi trường của hệ thống
ContextDemoServlet.java
import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException;
public class ContextDemoServlet implements Servlet {
ServletConfig servletConfig;
public void init(ServletConfig config) throws ServletException {
servletConfig = config;
}
public void destroy() {
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
ServletContext servletContext = servletConfig.getServletContext();
Enumeration attributes = servletContext.getAttributeNames();
while (attributes.hasMoreElements()) {
String attribute = (String) attributes.nextElement();
System.out.println("Attribute name : " + attribute);
Trang 10
Tài liệu hướng dẫn Servlet cơ bản
System.out.println("Attribute value : " +
servletContext.getAttribute(attribute));
}
System.out.println("Major version : " +
servletContext.getMajorVersion());
System.out.println("Minor version : " +
servletContext.getMinorVersion());
System.out.println("Server info : " +
servletContext.getServerInfo());

}
Trang 11
Tài liệu hướng dẫn Servlet cơ bản
public ServletConfig getServletConfig() {
return null;
}
}
Biên dịch và lưu file .class vào giaoviec/Web-INF/classes
Startup Tomcat và gõ địa chỉ
http://localhost:10000/giaoviec/servlet/AttributeSetterServlet để gán giá trị cho
Attribute
Nhận giá trị:
ResponseDemoServlet.java
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
public class ResponseDemoServlet implements Servlet {
ServletConfig servletConfig;
public void init(ServletConfig config) throws ServletException {
servletConfig = config;
}
public void destroy() {
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
ServletContext servletContext = servletConfig.getServletContext();
Enumeration attributes = servletContext.getAttributeNames();
while (attributes.hasMoreElements()) {
String attribute = (String) attributes.nextElement();
System.out.println("Attribute name : " + attribute);

ACTION=http://localhost:10000/giaoviec/servlet/RequestDemoServlet
METHOD="POST">
<BR><BR>
Author: <INPUT TYPE="TEXT" NAME="Author">
<INPUT TYPE="SUBMIT" NAME="Submit">
<INPUT TYPE="RESET" VALUE="Reset">
</FORM>
</BODY>
</HTML>
Trang 13
Tài liệu hướng dẫn Servlet cơ bản
Xử lý: tạo file RequestDemoServlet.java để nhận thông tin từ trang html ở trên
sau đó in ra
import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException;
public class RequestDemoServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
}
public void destroy() {
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
System.out.println("Server Port: " + request.getServerPort());
System.out.println("Server Name: " + request.getServerName());
System.out.println("Protocol: " + request.getProtocol());
System.out.println("Character Encoding: " +
request.getCharacterEncoding());
System.out.println("Content Type: " + request.getContentType());
System.out.println("Content Length: " + request.getContentLength());

trong của sổ Startup của Tomcat
6. Cách nhận Query String từ ServletResponse Interface
Giao diện: tạo file response.html nhận thông tin nhập vào lưu tại
giaoviec/
<HTML>
<HEAD>
<TITLE>Sending a request</TITLE>
</HEAD>
<BODY>
<FORM ACTION=http://localhost:10000/myApp/servlet/ResponseDemoServlet
METHOD="POST">
<BR><BR>
Author: <INPUT TYPE="TEXT" NAME="Author">
<INPUT TYPE="SUBMIT" NAME="Submit">
<INPUT TYPE="RESET" VALUE="Reset">
</FORM>
</BODY>
</HTML>
xử lý: ResponseDemoServle.java
import javax.servlet.*;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Enumeration;
public class ResponseDemoServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
}
public void destroy() {
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {

while (attributes.hasMoreElements()) {
String attribute = (String) attributes.nextElement();
out.println("<BR>Attribute name: " + attribute);
out.println("<BR>Attribute value: " +
request.getAttribute(attribute));
}
out.println("</BODY>");
out.println("</HTML>");
}
public String getServletInfo() {
return null;
}
public ServletConfig getServletConfig() {
return null;
}
}
Biên dịch lưu file .class tại giaoviec/Web_INF/classes và mở IE gõ địa
chỉ sau:
http://localhost:10000/giaoviec/servlet/Respose.html kết quả sẽ được trả
về trên trình duyệt
7. Cách nhận Query String từ HttpServletRequest
HttpRequestDemoServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class HttpRequestDemoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {

<TITLE>Banner</TITLE>
</HEAD>
<BODY>
<IMG SRC=image/111.jpg>
</BODY>
</HTML>
addServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class addServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
RequestDispatcher rd =
request.getRequestDispatcher("/AdBanner.html");
rd.include(request, response);
}
}
*/
Trang 17
Tài liệu hướng dẫn Servlet cơ bản
Viết 2 Servlet FirstSevlet và SecondServlet biên dịch và lưu file .class tại thư mục
giaoviec/Web-INF/classes
Sau đó mở IE và gõ địa chỉ sau: http://localhost:10000/giaoviec/servlet/FirstServlet
FirstServlet.java (trang này sẽ lấy các AttributeNames do trang
SecondSerlvet lấy được và in ra trên trình duyệt)
import javax.servlet.*;
import javax.servlet.http.*;

PrintWriter out = response.getWriter();
Enumeration enume = request.getAttributeNames();
while (enume.hasMoreElements()) {
String attributeName = (String) enume.nextElement();
out.println(attributeName + ": " +
request.getAttribute(attributeName) + "<BR>");
}
}
}
Trang 18
Tài liệu hướng dẫn Servlet cơ bản
8. HttpServletResponse
Giao tiếp HttpServletResponse cung cấp nhiều phương thức đặc trưng không có trong
giao tiếp javax.servlet.ServletResponse.
Giao tiếp HttpServletResponse extends từ giao tiếp javax.servlet.ServletResponse . Trong
suốt phần hướng dẫn này bạn đã luôn sử dụng 2 trong các phương thức của
HttpServletResponse khi gửi output đến trình duyệt đó là: setContentType và getWriter.
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Ta có thể dùng Response này để send cookie tới browser hoặc các thông tin về Session.
Hoặc có thể dùng sendRedirect. Để báo cho Browser gửi mổt lần nữa tới trang khác
Ví dụ về trang login
Nếu nhập đúng mật khẩu thì được vô trang Welcome
LoginServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class LoginServlet extends HttpServlet {
private void sendLoginForm(HttpServletResponse response,

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if (userName!=null && password!=null &&
userName.equals("tinh") && password.equals("truong")) {
response.sendRedirect("http://localhost:10000/");
}
else {
sendLoginForm(response, true);
}
}
}
Biên dịch và lưu file .class vào giaoviec/Web-INF/classes Sau đó mở IE và gõ địa chỉ
sau: http://localhost:10000/giaoviec/servlet/ LoginServlet
Sending an Error Code
response.sendError(response.SC_FORBIDDEN, "Login failed.");
Sending Special Characters
SpecialCharacterServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class SpecialCharacterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();

if (c=='<')
encodedTag.append("&lt;");
else if (c=='>')
encodedTag.append("&gt;");
else if (c=='&')
encodedTag.append("&amp;");
else if (c=='"')
encodedTag.append("&quot;"); //when trying to output text as
tag's
//value as in values="???".
else if (c==' ')
encodedTag.append("&nbsp;");
else
encodedTag.append(c);
}
return encodedTag.toString();
}
}
Biên dịch và lưu file .class vào giaoviec/Web-INF/classes Sau đó mở IE và gõ địa chỉ
sau: http://localhost:10000/giaoviec/servlet/ SpecialCharacterServlet
Buffering the Response
Mổi khi PrintWriter object được gọi thì nó sẽ gởi tới Browser
Tuy nhiên nếu buffering is enabled thì khi Servlet sử lý xong hoặc khi buffer bị đầy nó
mới gởi tòan bộ kết quả tới browser
Măc định buffering is enabled và the buffer size is 8,192 characters
Ta có thể dùng phương thức setbufferSize lớn hơn hoặc nhỏ hơn
Populating HTML Elements
Để xử lý các dấu “ ta dùng dấu \
Trang 21
Tài liệu hướng dẫn Servlet cơ bản

9. Sử dụng GenericServlet Class
Đơn giản hóa quá trình chạy Servlet bằng Genneric:
Từ đầu đến giờ các bạn đã tạo nhiều class Servlet thực thi javax.servlet.Servlet interface.
Mọi công việc đều rất tốt , nhưng có 2 vấn đề khiến chúng ta phải quan tâm ỏ đây là:
1. Bạn phải thực thi tất cả 5 phương thức của Setvlet interface cùng 1 lúc trong khi
bạn chỉ cần 1. Điều này tạo nên những phức tạp không cần thiết khi bạn lập trình.
2. Đối tượng ServletConfig được sử dụng trong phương thức init(). Bạn cần duy trì
đối tượng này để sử dụng trong các phương thức khác, điều này không khó nhưng
sẽ khiến bạn thêm công việc.
Gói javax.servlet cung cấp một lớp bao boc)được gọi là GenericServlet thực thi 2 giao
tiếp quan trọng từ gói javax.servlet: Servlet and ServletConfig, as well as the
java.io.Serializable interface. Lớp GenericServlet cung cấp thực thi cho tất cả phương
Trang 22
Tài liệu hướng dẫn Servlet cơ bản
thức. Bạn có thể extend GenericServlet và override duy nhất phương thức mà bạn cần sử
dụng. Đây là một giải pháp rất tốt : CLEARLY.
Chương trình dưới day là một servlet extends từ GenericServlet. Từ phương thức service
xuất ra trình duyệt. Vì servise là phương thức duy nhất bạn cần do đó chí có phương thức
này xuất hiện trong Class. So sánh với tất cả các lớp servlet thực thi từ giao tiếp
javax.servlet.Servlet , SimpleServlet looks much cleaner and clearer.
SimpleServlet.java
import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
public class SimpleServlet extends GenericServlet {
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");

public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
int counter = 0;
// get saved value
try {
BufferedReader reader = new BufferedReader(
new FileReader("counter.txt"));
counter = Integer.parseInt( reader.readLine() );
Trang 24
Tài liệu hướng dẫn Servlet cơ bản
reader.close();
}
catch (Exception e) {
}
// increment counter
counter++;
// delay for 6 seconds to make observation possible
try {
Thread thread = new Thread();
thread.sleep(6000);
}
catch (InterruptedException e) {
}
// saved new value
try {
BufferedWriter writer = new BufferedWriter(
new FileWriter("counter.txt"));
writer.write(Integer.toString(counter));
writer.close();
}


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status