50
3. Tổng quan về Servlet 3.1. Giới thiệu về servlet. 3.2. Chu trình servlet. 3.3. Yêu cầu đồng thời. 3.4. Đối tượng ServletConfig và ServletContext. 3.5. Đối tượng ServletRequest và ServletResponse. 3.6. Xử lý dữ liệu.

3. Tổng quan về Servlet

Embed Size (px)

DESCRIPTION

3. Tổng quan về Servlet. 3.1. Giới thiệu về servlet. 3.2. Chu trình servlet. 3.3. Yêu cầu đồng thời. 3.4. Đối tượng ServletConfig và ServletContext. 3.5. Đối tượng ServletRequest và ServletResponse. 3.6. Xử lý dữ liệu. 3.1. Giới thiệu về Servlet. - PowerPoint PPT Presentation

Citation preview

Page 1: 3. Tổng quan về Servlet

3. Tổng quan về Servlet

3.1. Giới thiệu về servlet.3.2. Chu trình servlet.3.3. Yêu cầu đồng thời.3.4. Đối tượng ServletConfig và

ServletContext.3.5. Đối tượng ServletRequest và

ServletResponse.3.6. Xử lý dữ liệu.

Page 2: 3. Tổng quan về Servlet

3.1. Giới thiệu về Servlet Servlet là một thành phần J2EE ở phía

server của ứng dụng theo kiến trúc J2EE thực hiện logic nghiệp cho một HTTP request. Nó được chạy ở phía server (không chạy ở

client) Là một class Java được chạy trong một môi

trường JVM của một trình chứa Web. Là một Web component và được quản lý bởi

trình chứa Web. Để tạo một servlet, kiến trúc J2EE cung cấp

các Servlet API (một tập hợp các class java định nghĩa giao tiếp chuẩn giữa Web client và Web Server).

Page 3: 3. Tổng quan về Servlet

Giới thiệu về Servlet (tiếp)

•Servlet API bao gồm hai package:

- javax.servlet- javax.servlet.http

•Một servlet có thể kế thừa từ hai lớp javax.servlet.GenericServlet hoặc javax.servlet.http.HttpServlet•Trong môi trường web, giao thức HTTP được sử dụng giữa Web client và Web server. Vì vậy servlet thường được kế thừa từ lớp javax.servle.http.HttpServlet, sau đó viết chồng hàm các phương thức cần thiết để phục vụ yêu cầu từ client.

javax.servlet.Servlet

javax.servlet.GenericServlet

javax.servlet.http.HttpServlet

implements

Page 4: 3. Tổng quan về Servlet

Giới thiệu về Servlet (tiếp)

Các phương thức cần viết chồng hàm là service (hoặc doGet, doPost), init, destroy.

Khi có yêu cầu gửi đến server, phương thức service (hoặc doGet, doPost), sẽ được gọi và truyền theo 2 tham số: HttpServletRequest: cung cấp sự truy cập

tới dữ liệu yêu cầu từ client, thông tin về phiên làm việc.

HttpServletResponse: cung cấp các dịch vụ cho phép servlet tạo một trả lời cho yêu cầu của client.

Page 5: 3. Tổng quan về Servlet

Giới thiệu về Servlet: Luồng xử lý của Servlet

1. Client yêu cầu một servlet, tên của servlet là một phần của URL (vd: http://www.music.com/music/SearchServlet).

WebServer

Browser(client)

ApplicationServer

ServletInstance

URL Request

Response

Page 6: 3. Tổng quan về Servlet

Giới thiệu về Servlet: Luồng xử lý của Servlet (tiếp)

2. Web server nhận yêu cầu (request) và gửi nó tới servlet engine, là nơi mà quản lý và tạo ra các thể hiện của servlet.

3. Servlet engine sẽ gọi phương thức service (hoặc doPost, doGet) của servlet để xử lý yêu cầu.

4. Servlet sẽ tiếp nhận yêu cầu cùng với các tham số, tài nguyên khác, sau đó xử lý và tạo ra một kết quả trả lời tương ứng (response) và chuyển kết quả cho Web server.

5. Web server sẽ gửi trả kết quả này (response) cho client.

Page 7: 3. Tổng quan về Servlet

3.2. Chu trình ServletTạo mới

Khởi tạo

Xử lý Yêu cầu

Sẵn sàngPhục vụ

Không thểPhục vụ

Huỷ bỏ

Dỡ bỏ

Khởi tạo thất bại

Khởi tạo Thành công

Exception

Page 8: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

Servlet được quản lý thông qua một chu trình chỉ ra cách nó được tạo ra, khởi tạo, xử lý yêu cầu từ client và huỷ bỏ:1. Tạo mới:

– Trình chứa Servlet sẽ chịu trách nhiệm nạp và tạo ra các thể hiện (instance) của servlet. Quá trình này sẽ được thực hiện khi trình chứa được khởi động hoặc khi trình chứa xác định rằng servlet cần được nạp để xử lý các yêu cầu.

Page 9: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

– Khi servlet engine được khởi động, các servlet cần thiết sẽ được định vị bởi trình chứa servlet, trình chứa sẽ nạp các servlet, sau đó sẽ tạo ra các thể hiện để có thể sử dụng.

2.Khởi tạo– Đọc các tham số cấu hình, thực hiện các

hành động chỉ thực hiện một lần và khởi tạo các tài nguyên cần thiết.

– Sau khi một thể hiện của servlet được tạo ra, nó phải được khởi tạo trước khi có thể xử lý các yêu cầu từ client.

Page 10: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

– Phương thức init sẽ được gọi để thực hiện quá trình khởi tạo như nạp các giá trị mặc định. Có 2 phương thức init, một phương thức không có tham số, một phương thức nhận đối tượng ServletConfig là tham số. Phương thức cho phép servlet truy cập từng cặp “Tên - Giá trị” của các tham số khởi tạo.

– Đối tượng ServletConfig chứa thông tin cấu hình của servlet, nó cho phép truy cập tới đối tượng ServletContext (là đối tượng chứa thông tin về môi trường của servlet).

Page 11: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

- Nếu khởi tạo thành công servlet sẽ chuyển sang trạng thái sẵn sàng để phục vụ các yêu cầu từ client. Ngược lại nó sẽ báo lỗi ra ngoài (thường là UnavailableException), khi đó trình chứa sẽ giải phóng thể hiện này (không gọi phương thức destroy), sau đó sẽ tạo và khởi tạo một thể hiện khác.

Page 12: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

3. Xử lý yêu cầu- Nhận yêu cầu từ client, xử lý và trả lời

lại cho web server.- Trình chứa Servlet cung cấp hai đối

tượng: yêu cầu kiểu ServletRequest và trả lời kiểu ServletResponse. Hai đối tượng này là 2 tham số cho phương thức service.

Page 13: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

– Trong trường hợp yêu cầu có dạng là HTTP, các đối tượng được trình chứa cung cấp có kiểu HttpServletRequest và HttpServletResponse.

– Các phương thức service, doGet, doPost, .. được gọi để xử lý các yêu cầu của client (mỗi yêu cầu HTTP sẽ được xử lý trên một luồng riêng). Mặc định phương thức service sẽ gọi phương thức doGet khi một yêu cầu HTTP GET được gửi từ client (hành động được gọi từ URL), hoặc phương thức doPost khi một yêu cầu HTTP POST được gửi từ client (hành động được gọi từ form HTML).

Page 14: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

- Trong quá trình phục vụ yêu cầu, servlet có thể báo lỗi ServletException để chỉ lỗi khi xử lý, hoặc UnavailableException để chỉ nó tạm thời chưa sẵn sàng hoặc không thể phục vụ. Nếu tạm thời chưa sẵn sàng thì yêu cầu sẽ không được chuyển tới, nếu không thể phục vụ thì thể hiện sẽ được giải phóng (destroy), sau đó tạo và khởi tạo lại.

4. Kết thúc– Sau khi thực hiện yêu cầu, một servlet có thể

được giữ lại ở trình chứa thêm một khoảng thời gian nữa (tuỳ thuộc vào cấu hình).

Page 15: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

– Khi trình chứa thấy rằng một servlet nên được gỡ bỏ nó sẽ gọi phương thức destroy để giải phóng tất cả tài nguyên sử dụng cho servlet và lưu lại những trạng thái thường trú của servlet. Điều này có thể thực hiện khi trình chứa cần lấy lại tài nguyên bộ nhớ hoặc khi nó bị ngừng hoạt động.

– Trước khi trình chứa servlet gọi phương thức destroy nó phải cho phép tất cả các luồng đang chạy trong phương thức service hoàn thành.

Page 16: 3. Tổng quan về Servlet

Chu trình Servlet (tiếp)

– Khi phương thức destroy đã được gọi, trình chứa sẽ không gửi các yêu cầu khác đến thể hiện này nữa, nếu cần thì nó sẽ làm điều này với một thể hiện mới của servlet.

– Sau khi phương thức destroy hoàn thành trình chứa sẽ giải phóng thể hiện của servlet (garbage collection).

Page 17: 3. Tổng quan về Servlet

3.3. Yêu cầu đồng thời

Browser

Browser

WebServer

thread

thread

thread

Servlet engine

ServletHTTP

Request

Page 18: 3. Tổng quan về Servlet

Yêu cầu đồng thời (tiếp)

Ở chế độ chạy đơn luồng, các yêu cầu đồng thời tới server sẽ được phục vụ trên các thể hiện khác nhau của servlet, nếu không đủ số thể hiện thì các yêu cầu còn lại sẽ được phục vụ khi nào có thể hiện rỗi.

Khi servlet ở chế độ chạy đơn luồng, nó có thể coi là luồng an toàn tức là không cần phải đảm bảo đồng bộ việc truy cập các biến, tài nguyên của nó. Tuy nhiên nó vẫn cần tuân theo một số quy định sau:

Page 19: 3. Tổng quan về Servlet

Yêu cầu đồng thời (tiếp)

Ở chế độ chạy đơn luồng, các yêu cầu đồng thời tới server sẽ được phục vụ trên các thể hiện khác nhau của servlet, nếu không đủ số thể hiện thì các yêu cầu còn lại sẽ được phục vụ khi nào có thể hiện rỗi.

Khi servlet ở chế độ chạy đơn luồng, nó có thể coi là luồng an toàn tức là không cần phải đảm bảo đồng bộ việc truy cập các biến, tài nguyên của nó. Tuy nhiên nó vẫn cần tuân theo một số quy định sau:

Page 20: 3. Tổng quan về Servlet

Yêu cầu đồng thời (tiếp)

Vẫn phải quản lý cẩn thận những biến và thành phần không phải là hằng số (final).

Các tài nguyên và bộ nhớ dùng chung phải được khoá lại khi có một luồng truy cập.

Do servlet đơn luồng làm giảm tốc độ và hiệu năng của hệ thống, vì vậy nên tránh dùng nó.

Page 21: 3. Tổng quan về Servlet

3.4. Đối tượng ServletConfig và ServletContext: ServletConfig

Được trình chứa servlet sử dụng để truyền thông tin cho servlet trong suốt quá trình khởi tạo của servlet.

Lưu trữ thông tin cấu hình của servlet. Mỗi servlet trên một server chỉ có duy

nhất một đối tượng ServletConfig. Lấy về đối tượng ServletConfig bằng

phương thức getServletConfig().

Page 22: 3. Tổng quan về Servlet

Đối tượng ServletConfig và ServletContext: ServletConfig (tiếp)

Một số phương thức: Lấy về tham số khởi tạo (một cặp Tên –

Giá trị): public String getInitParameter(String

name): trả về giá trị của tham số có tên là name.

public Enumeration getInitParameterNames(): trả về tập hợp tên các tham số khởi tạo.

Lấy về đối tượng ServletContext: public ServletContext getServletContext();

Page 23: 3. Tổng quan về Servlet

Ví dụ: Khai báo servlet

<servlet><servlet-name>RegistrationServlet</servlet-name> <display-name>RegistrationServlet</display-name>

<servlet-class>com.ibm.exam.servlet.RegistrationServlet </servlet-class>

<init-param><param-name>MaxTries</param-name>

<param-value>4</param-value></init-param><init-param>

<param-name>AutoSave</param-name> <param-value>false</param-value></init-param><load-on-startup>1</load-on-startup>

</servlet><servlet-mapping>

<servlet-name>RegistrationServlet</servlet-name> <url-pattern>Register</url-pattern>

</servlet-mapping>

Page 24: 3. Tổng quan về Servlet

Ví dụ: Lấy tham số khởi tạo

// Phương thức khởi tạopublic void init() {

String maxTries;String autoSave;maxTries = getInitParameter("MaxTries"); autoSave = getInitParameter("AutoSave"); … //Xử lý

}hoặcpublic void init() {

ServletConfig config = getServletConfig(); String maxTries;String autoSave;maxTries = config.getInitParameter("MaxTries"); autoSave = config.getInitParameter("AutoSave");

}

Page 25: 3. Tổng quan về Servlet

Đối tượng ServletConfig và ServletContext: ServletContext

Là đối tượng chứa thông tin về môi trường, trạng thái của servlet khi nó đang hoạt động. Nhờ đó servlet có thể log các sự kiện, truy cập tài nguyên, thay đổi các thuộc tính mà các servet trong cùng context có thể truy cập.

Mỗi ứng dụng web cài đặt trên một trình chứa Web chỉ có duy nhất một thể hiện của ServletContext. Trường hợp trình chứa được phân tán trên nhiều JVM thì mỗi JVM sẽ có một thể hiện chạy trên đó.

Page 26: 3. Tổng quan về Servlet

Đối tượng ServletConfig và ServletContext: ServletContext (tiếp)

Các servlet không được cài đặt như một phần ứng dụng sẽ có một đối tượng ServletContext mặc định, đối tượng này chỉ tồn tại trên một JVM duy nhất (kể cả khi trình chứa phân tán).

Một số phương thức: Lấy về tham số khởi tạo (một cặp Tên –

Giá trị): public String getInitParameter(String

name): trả về giá trị của tham số có tên là name.

public Enumeration getInitParameterNames(): trả về tập hợp tên các tham số khởi tạo.

Page 27: 3. Tổng quan về Servlet

Đối tượng ServletConfig và ServletContext: ServletContext (tiếp)

Truy cập các thuộc tính: Public void setAttribute(String name,

Object value): gán giá trị value cho thuộc tính có tên là name.

Public String getAttribute(String name): trả về giá trị của thuộc tính có tên là name.

Public Enumerator getAttributeNames(); trả về tập hợp tên các thuộc tính.

Public void removeAttribute(String name): xóa bỏ thuộc tính có tên là name từ servlet context.

Page 28: 3. Tổng quan về Servlet

Đối tượng ServletConfig và ServletContext: ServletContext (tiếp)

Truy cập tài nguyên: public URL getResource(String path) public InputStream

getResourceAsStream(String path)

Page 29: 3. Tổng quan về Servlet

Client

Web Browser

Web Server

File System

ServerNetw

ork

HTTP Request

HTTP Response

Web Cotainer

Web Server Plug-inRequests

forDynamicresources

Requests for static resource

s Dynamicresponse

3.5. Đối tượng ServletRequest và ServletResponse: ServletRequest

Page 30: 3. Tổng quan về Servlet

3.5. Đối tượng ServletRequest và ServletResponse: ServletRequest

Là đối tượng đóng gói toàn bộ thông tin về yêu cầu từ client (tham số (paramter), thông tin session, …) gửi tới server. Trong giao thức HTTP, các thông tin này được truyển từ Web server (hoặc application server) tới client trong các HTTP header và body tài liệu của yêu cầu.

Là một trong hai đối tượng dùng làm tham số cho các phương thức service, doGet và doPost.

Page 31: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletRequest (tiếp)

Tham số của ServletRequest là các chuỗi được gửi từ client tới trình chứa servlet. Khi ServletRequest là một đối tượng có kiểu HttpServletRequest thì trình chứa sẽ thao tác với các tham số từ URI query string (GET) hoặc từ post body (POST).

Dữ liệu từ query string và post body được kết hợp thành tập các tham số ServletRequest. Khi có cả query string và post body thì dữ liệu của query string sẽ được lấy trước. Nếu tham số của query string và post body có cùng tên thì dữ liệu nhận được sẽ là một mảng các giá trị cho cùng một tham số đó.

Page 32: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletRequest (tiếp)

Các tham số được lưu như một cặp “tên – giá trị”. Nhiều giá trị có thể có cùng một tên tham số. ServletRequest cung cấp một số phương thức để truy cập các tham số:

Public String getParamter(String name): trả lại giá trị của tham số có tên là name.

public Enumeration getParameterNames(): trả lại danh sách tên của tất cả các tham số trong ServletRequest.

public String[] getParamterValues(String name): trả lại danh sách giá trị của các tham số có tên là name.

Page 33: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletRequest (tiếp)

Ngoài các tham số đối tượng ServletRequest còn có thể lưu trữ các thuộc tính cần thiết cho trình chứa để biểu thị các thông tin khác. Các thuộc tính có thể truy xuất qua các phương thức:

Public String getAttribute(String name): trả lại giá trị của thuộc tính có tên là name.

Public Enumeration getAttributeNames(): trả lại danh sách tên của tất các thuộc tính trong ServletRequest.

Page 34: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletRequest (tiếp)

public void setAttribute(String name, Object obj): lưu một thuộc tính có tên là name, giá trị obj vào trong ServletRequest.

public void removeAttribute(String name): xoá bỏ thuộc tính có tên là name khỏi ServletRequest.

Servlet còn có thể truy cập header của một yêu cầu HTTP thông qua:

Public String getHeader(String name): trả lại nội dung của header có tên là name.

Page 35: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletRequest (tiếp)

Public Enumeration getHeaderNames(): trả lại danh sách tất cả các tên của header.

Public Enumeration getHeader(String name): trả lại mảng các giá trị của header có tên là name.

Page 36: 3. Tổng quan về Servlet

Ví dụ: HTML Form

<P>Please fill out this form with your name. Thanks!<FORM METHOD="POST"

ACTION="/Music/SearchServlet"><P>Please enter your name:<P>First name:

<Input name="song_title" type=“text" size="12" maxlength="20"> <P>Surname:

<Input name="song_artist" type=“text" size="15" maxlength=“25"> <P>Thank you!<input type=“submit><input type=“reset”>

</FORM>

Page 37: 3. Tổng quan về Servlet

Ví dụ: Đọc HTTP POSTpublic class SearchServlet extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {...Enumeration enum = req.getParameterNames();while (enum.hasMoreElements()) {

String name = (String) enum.nextElement(); String value = req.getParameter(name); //… xử lý...

}…

}…

}

Page 38: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletResponse

Là đối tượng đóng gói toàn bộ thông tin sẽ được trả lại từ server cho client. Trong giao thức HTTP, thông tin này sẽ được truyển từ Web server (application server) tới client trong các HTTP header và phần thân tài liệu của kết quả trả về.

Là một trong hai đối tượng dùng làm tham số cho các phương thức service, doGet và doPost.

Page 39: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletResponse (tiếp)

Nội dung một ServletResponse: Content type : kiểu dữ liệu trả về, vd html, pdf,

doc, … Status code: mã báo hiệu trạng thái kết quả trả

về: 1xx: Informational – request đã nhận được và

đang tiếp tục xử lý. 2xx: Success – hành động được xử lý thành công. 3xx: Redirection. 4xx: Client Error –yêu cầu chứa lỗi cú pháp hoặc

client lỗi. 5xx: Server Error – yêu cầu hợp lệ, server lỗi.

Page 40: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletResponse (tiếp)

Content header: nội dung header (cookies, caching, …).

Content body: nội dung động hoặc thông tin lỗi.

Một số phương thức: Public void setStatus(int sc): thiết lập trạng

thái cho ServletResponse. Public void setContentType(String type): thiết

lập kiểu dữ liệu trả về (html, pdf, doc, …).(http://www.mimetype.org/)

Public void setBufferSize(int size): thiết lập kích thước buffer cho ServletResponse.

Page 41: 3. Tổng quan về Servlet

Đối tượng ServletRequest và ServletResponse: ServletResponse (tiếp)

Public PrintWriter getWrite(): trả về đối tượng dùng để gửi các ký tự text tới client.

Public ServletOutputStream getOutputStream(): trả về đối tượng dùng để gửi dữ liệu nhị phân tới client.

Page 42: 3. Tổng quan về Servlet

Ví dụ: HTTP Request - Response

Client/Browser

Web Server/ Application

server

GET (yêu cầu) một tài liệu HTMLmusicSearch.html (request)

Trả về tài liệu – musicSearch.html

Submit form (POST – yêu cầu)Gọi đến MusicServlet (request)

Servlet tạo ra một HTML response dựa trên đầu vào từ form submit. Server

sẽ trả về tài liệu HTML (response)

Page 43: 3. Tổng quan về Servlet

Ví dụ: HTML Form<form action="/Music/SearchServlet" method="POST"><h3>Music Store Search</h3><br><strong>Type in the song title: </strong> <input type="text"

size="55" name="song_title"><br><strong>Type in the song artist:</strong><input type="text"

size="55" name="song_artist"><br><input type="submit"

value="Search"><br><strong>Display the first </strong>

<select name="limit_number" value=20 size="1">

<option>250</option><option>100</option></select>

<strong>documents found</strong></form>...

Page 44: 3. Tổng quan về Servlet

Ví dụ: HTML Form

Page 45: 3. Tổng quan về Servlet

Ví dụ: Yêu cầu HTTP Kiểu request

(POST). Giá trị header. 1 dòng trắng. Dữ liệu vào

(posted data).

POST /Music/SearchServlet HTTP/1.0

Referer: http://www.music.ibm.com/musicSearch.html

Connection: Keep-Alive

User-Agent: Mozilla/4.72 [en] (WinNT 5.0; U)

Host: localhost:8080

Cookie: USERID=spot

Accept: image/gif, image/x-xbitmap, image/jpeg, *

Accept-Language: en

Accept-Charset: iso-8859-1,*,utf-8

Content-type: application/x-www-form-urlencoded

Content-length: 50

Song_title=Hello&song_artist=Jone&limit_number=20

Page 46: 3. Tổng quan về Servlet

Ví dụ: Kết quả trả về HTTP Trạng thái trả về (ví dụ 200 – thành công). Giá trị header. 1 dòng trắng. Dữ liệu ra (HTML).

HTTP/1.1 200 okContent-Type: text/htmlSet-Cookie: sessionid=5H2HXGYAAAAAEWQAAAAZJCI;Path=/ Cache-Control: no-cache="set-cookie,set-cookie2"Expires: Thu, 01 Dec 1994 16:00:00 GMTSet-Cookie: USERID=spot;Expires=Fri, 08-Jun-2001 21:54:37 GMT Content-Language: en

<HTML> <BODY><H1>Very simple dynamic document created on 01-Jun-2001</H1> </BODY></HTML>

Page 47: 3. Tổng quan về Servlet

3.6. Xử lý dữ liệu Dữ liệu gửi từ Web browser tới Web

server có thể là một phần của URI (query data) hoặc bằng một HTML Form (form data).

Với yêu cầu GET, form data sẽ được truyển tới server như một chuỗi yêu cầu:

http://webqlac.tct.vn/MyServlet?name=Ha+Noi

Với yêu cầu POST, form data sẽ được chuyển tới server như một phần của thân yêu cầu .

Page 48: 3. Tổng quan về Servlet

Xử lý dữ liệu (tiếp)

Các trường và giá trị sẽ phân cách nhau bởi “&” và “=”:

name=maket&value=12 Query data sẽ được mã hoá khi truyền tới

server và được giải mã trước khi xử lý:name=Tran Tam&age=27 ½ years sẽ được

mã hoá thành: name=Tran+Tam&age=27+1%2F2+years

Page 49: 3. Tổng quan về Servlet

Xử lý dữ liệu (tiếp)

Các bước chung để xử lý một yêu cầu HTTP:

1. Xử lý input data (form).2. Xử lý input header.3. Khởi tạo và thực hiện công việc nghiệp

vụ.4. Thiết lập trạng thái trả về.5. Thiết lập header.6. Gửi kết quả cho client.

Page 50: 3. Tổng quan về Servlet

Xử lý dữ liệu (tiếp)

Lưu ý rằng cần phải thiết lập mã trạng thái và header trước khi dữ liệu được gửi tới client.

Nếu yêu cầu HTTP được chuyển tiếp tới một URL khác thì điều này cũng phải thực hiện trước khi dữ liệu được gửi tới client.