1 / 50

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. 3.1. Giới thiệu về Servlet.

Télécharger la présentation

3. Tổng quan về Servlet

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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).

  3. 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 javax.servlet.Servlet implements javax.servlet.GenericServlet 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.

  4. 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.

  5. Giới thiệu về Servlet: Luồng xử lý của Servlet URL Request Servlet Instance Response Application Server Browser (client) Web Server • 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).

  6. 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.

  7. 3.2. Chu trình Servlet Khởi tạo thất bại Tạo mới Khởi tạo Không thể Phục vụ Khởi tạo Thành công Sẵn sàng Phục vụ Exception Huỷ bỏ Xử lý Yêu cầu Dỡ bỏ

  8. 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.

  9. 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.

  10. 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).

  11. 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.

  12. 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.

  13. 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).

  14. 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).

  15. 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.

  16. 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).

  17. 3.3. Yêu cầu đồng thời Browser Web Server thread thread thread Servlet engine HTTP Request Servlet Browser

  18. 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:

  19. 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:

  20. 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ó.

  21. 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().

  22. Đố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();

  23. 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>

  24. Ví dụ: Lấy tham số khởi tạo // Phương thức khởi tạo public void init() { String maxTries; String autoSave; maxTries = getInitParameter("MaxTries"); autoSave = getInitParameter("AutoSave"); … //Xử lý } hoặc public void init() { ServletConfig config = getServletConfig(); String maxTries; String autoSave; maxTries = config.getInitParameter("MaxTries"); autoSave = config.getInitParameter("AutoSave"); }

  25. Đố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 đó.

  26. Đố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.

  27. Đố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.

  28. Đố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)

  29. 3.5. ĐốitượngServletRequestvàServletResponse: ServletRequest Server Client HTTP Request Network Web Browser Web Server Plug-in Requests for Dynamic resources HTTP Response Requests for static resources Dynamic response Web Server Web Cotainer File System

  30. 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.

  31. Đố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ố đó.

  32. Đố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.

  33. Đố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.

  34. Đố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.

  35. Đố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.

  36. 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>

  37. Ví dụ: Đọc HTTP POST public 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ý... } … } … }

  38. Đố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.

  39. Đố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.

  40. Đố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.

  41. Đố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.

  42. Ví dụ: HTTP Request - Response GET (yêu cầu) một tài liệu HTML musicSearch.html (request) Trả về tài liệu – musicSearch.html Submit form (POST – yêu cầu) Gọi đếnMusicServlet (request) Client/ Browser 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) Web Server / Application server

  43. 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>...

  44. Ví dụ: HTML Form

  45. Ví dụ: Yêu cầu HTTP 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 • Kiểu request (POST). • Giá trị header. • 1 dòng trắng. • Dữ liệu vào (posted data).

  46. 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 ok Content-Type: text/html Set-Cookie: sessionid=5H2HXGYAAAAAEWQAAAAZJCI;Path=/ Cache-Control: no-cache="set-cookie,set-cookie2" Expires: Thu, 01 Dec 1994 16:00:00 GMT Set-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>

  47. 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 .

  48. 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

  49. 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.

  50. 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.

More Related