I. Khái niệm:
- Ngoài JSP là công nghệ tạo trang Web động bằng java chúng ta còn có Servlet. Nhưng khi viết bằng JSP thì code Java và các thẻ html trộn lẫn với nhau, vì vậy khi chương trình mở rộng thì chúng ta rất khó quản lý các đoạn code này, hơn nữa code JSP để bị người khác đọc vì nó nhúng chung với html dẫn tới kém bảo mật.
- Ngược lại khi viết bằng Servlet thì khác, mọi vấn đề trên sẽ được giải quyết một cách đễ dàng. Vậy Servlet là gì? Nó đơn giản chỉ là một lớp Java (*.java) chúng ta phải biên dịch thành file class sau đó sẽ chạy bằng file class này, vì thế code sẽ được bảo mật hơn so với cách trên.
- Để viết một Servlet: chúng ta đơn giản chỉ cần kế thừa từ một trong hai lớp sau:
import javax.servlet.http.HttpServlet;
import javax.servlet.GenericServlet;
- Sau đây là các hàm hiện nay trong các mã được tạo ra bởi NetBeans IDE: processRequest(), doGet(), doPost(), getServletInfo().
II. Vòng đời:
1. Khởi tạo:
- Khởi tạo khi yêu cầu được nhận.
- Phương pháp init() của giao diện javax.servlet được sử dụng để khởi tạo một servlet.
- Khởi tạo sau khi Servlet được tải bằng thùng chứa của ứng dụng.
- Khởi tạo chỉ một lần.
2. Dịch vụ:
- Dịch vụ được cung cấp bởi các Servlet được xác định trong các hàm service()
- Các hàm service có hai kiểu tham số: ServletRequest và ServletResponse.
- Có thể được gọi bất kỳ số lần sau khi khởi tạo.
3. Sự phá hủy:
- Servlet bị loại bỏ từ bộ nhớ sử dụng hàm destroy().
- Hàm đó thu hồi bộ nhớ được phân bổ cho các Servlet.
- Triệu gọi chỉ một lần.
III. Bối cảnh và cấu hình:
- Một bối cảnh servlet xác định các thuộc tính khác nhau của các servlet và các nguồn lực khác nhau truy cập bằng một servlet.
- Nó được xác định thông qua javax.servlet.ServletContext lớp trong Java Servlet API. Bối cảnh được khởi tạo khi servlet được khởi tạo.
- Khi một servlet được tạo ra thông qua NetBeans IDE, bối cảnh của servlet được thiết lập trong việc triển khai các ứng dụng thông qua các web.xml mô tả triển khai. Vị trí của web.xml được hiển thị trong hình.
- Mỗi đối tượng ServletContext có một đối tượng ServletConfig liên quan, trong đó có tất cả các chi tiết cấu hình như các tham số khởi tạo và các giá trị khác được tạo ra bởi các container. Sau đây là các phương pháp quy định trong giao diện ServletConfig:
+ getInitParameter(): Phương pháp này chấp nhận tên tham số khởi tạo và trả về giá trị tham số khởi tạo.
+ getInitParameterNames(): Phương thức này trả về tên của tất cả các tham số khởi tạo.
+ getServletContext(): Phương thức này trả về bối cảnh trong đó các servlet được thực hiện.
+ getServletName(): Phương thức này trả về tên của servlet.
IV. Tạo một Servlet trong Netbean
Bước 1: Chọn File / New Project => Java Web / Web Application
Bước 2: Chọn Project / New / Servlet
V. Hàm Request and Response:
- Các yêu cầu có thể là một ServletRequest hoặc HttpServletRequest đối tượng và như một phản ứng, servlet có thể tạo ra ServletResponse hoặc đối tượng HttpServletResponse.
- Định dạng của một yêu cầu HTTP (HTTPRequest) là như sau:
http://[host]:[port][request-path]?[query-string]
- Một phản ứng (Response) là một thông tin liên lạc từ các servlet cho Client. Sau đây là các bước khác nhau:
+ Các dữ liệu cho khách hàng có thể được gửi qua một dòng đầu ra như PrintWriterStream và nội dung đa phương tiện thông qua một đối tượng ServletOutputStream.
+ Các phương pháp trong giao diện ServletResponse được sử dụng để chỉ các kiểu nội dung của các phản ứng trong trường hợp nội dung đa phương tiện.
+ Có nhiều phương pháp để truyền đạt các yêu cầu của bộ nhớ đệm.
- Các giao diện ServletRequest cung cấp các phương pháp getParameter để lấy các thông số yêu cầu trên servlet. Cú pháp của phương pháp này là như sau:
String getParameter(String name)
- Phương thức này trả về giá trị của một tham số yêu cầu như là một String hoặc null nếu tham số không tồn tại.
- Đoạn code trạng thái HTTP (HTTPStatus) cũng được bao gồm trong trường hợp phản ứng HTTP. Nó khác nhau được thể hiện như sau:
- Phiên HTTP (HTTPSession) cũng có thể yêu cầu cookie được đặt trên phía máy khách. Những cookie này có các thông tin session sẽ được gửi đến các Client từ các máy chủ.
VI. Các lớp Listener:
- javax.servlet.AsyncListener: Nếu có sự thay đổi trạng thái của một hoạt động không đồng bộ được khởi xướng bởi một đối tượng ServletRequest. Các sự kiện không đồng bộ được kích hoạt do một ServletRequest là loại javax.servlet.AsyncEvent.
- javax.servlet.ServletContextListener: Khi một sự kiện chu kỳ như khởi tạo của một Servlet xảy ra. Các đối tượng sự kiện tương ứng là javax.servlet.ServletContextEvent.
- javax.servlet.ContextAttributeListener: Khi có sự thay đổi trong các thuộc tính của các sự kiện, chu kỳ của Servlet. Các sự kiện tương ứng là javax.servlet.ContextAttributeEvent.
- javax.servlet.ServletRequestListener: Nếu nhận được yêu cầu Servlet hoặc gửi ra một yêu cầu từ các ứng dụng Web. Các sự kiện tương ứng là, javax.servlet.ServletRequestEvent.
- javax.servlet.ServletRequestAttributeListener: Nếu có sự thay đổi trong các thuộc tính của các yêu cầu Servlet. Các sự kiện tương ứng là, javax.servlet.RequestAttributeEvent.
- javax.servlet.http.HttpRequestListener: Khi có yêu cầu HTTP được nhận từ các thành phần khác hoặc khi yêu cầu HTTP được gửi đến các thành phần khác của ứng dụng.
- javax.servlet.http.HttpSessionBindingListener: khi một đối tượng nhất định là bị ràng buộc hoặc chưa cam kết một phiên HTTP. Các sự kiện tương ứng là, javax.servlet.http.HttpSessionBindingEvent.
- javax.servlet.http.HttpSessionAttributeListener: Khi có sự thay đổi trong các thuộc tính của một phiên HTTP.
- javax.servlet.http.HttpSessionActivationListener: Phiên HTTP có thể được thụ động thay vì loại bỏ chúng khỏi bộ nhớ và một lần nữa kích hoạt khi có một yêu cầu cho các Servlet. Khi kích hoạt phiên HTTP xảy ra, đối tượng Listener này được thông báo.
VII. RequestDispatcher:
- Một đối tượng RequestDispatcher được sử dụng để chuyển tiếp yêu cầu các nguồn lực hoặc thêm một tài nguyên trong một phản ứng. Các nguồn tài nguyên có thể là năng động hay tĩnh.
- Một tên đường dẫn tương đối có thể được chỉ định, tuy nhiên, nó có thể không kéo dài bên ngoài bối cảnh servlet hiện hành.
- Nếu đường dẫn bắt đầu với một dấu "/" nó được hiểu là liên quan đến gốc bối cảnh hiện nay.
- Nó bao gồm hai phương thức như sau:
+ void forward (ServletRequest request, ServletResponse response)
+ void include (ServletRequest request, ServletResponse response)
VIII. Xử lý không đồng bộ:
- Trong khi thực hiện các servlet và các bộ lọc trong một ứng dụng, nếu việc thực đạt đến một trạng thái chặn, sau đó thực hiện các chủ đề được bàn giao cho một bối cảnh không đồng bộ và lợi nhuận mà không tạo ra các phản ứng.
- Giao diện javax.servlet.AsyncContext cung cấp các chức năng cần thiết cho việc xử lý không đồng bộ.
- Sau đây là một số phương pháp được cung cấp bởi lớp AsyncContext:
+ void start(Runnable r) - Thông qua phương pháp này, thùng chứa cung cấp một ví dụ chủ đề mới để thực hiện các hoạt động đó là ngăn chặn các servlet ứng dụng được rút ra khỏi thùng chứa.
+ getRequest() - Trả về một đối tượng ServletRequest để trả lại yêu cầu đó đã bắt đầu quá trình thiết lập một bối cảnh không đồng bộ.
+ getResponse() - Trả về một đối tượng ServletResponse. Nó có thể được sử dụng để tạo ra các đáp ứng với yêu cầu Servlet từ bối cảnh không đồng bộ.
+ complete() - Hoàn thành các hoạt động không đồng bộ và trả về đáp ứng cho Client mà đã yêu cầu các hoạt động.
+ dispatch() - Chấp nhận các đường dẫn gửi đi như một tham số và công văn yêu cầu và phản ứng của các bối cảnh không đồng bộ.
IX. Non-blocking I/O
- Non-blocking I/O được sử dụng để xử lý yêu cầu và phản ứng để cải thiện hiệu suất của các ứng dụng Java. Sau đây các bước tóm tắt việc thực hiện các non-blocking I/O:
+ Khởi đầu một chế độ không đồng bộ cho các yêu cầu/phản ứng.
+ Đối với các yêu cầu hoặc đáp ứng các đối tượng trong các phương thức dịch vụ, có được tương ứng với đầu vào/ra.
+ Chỉ định các Listener đến các dòng đầu vào và đầu ra, cách đọc liên quan đến dòng đầu vào và cách viết liên quan đến dòng đầu ra.
+ Xử lý các yêu cầu và phản ứng trong phương thức Listener Callback.
- Sau đây là các phương pháp được cung cấp bởi các javax.servlet.ServletInputStream:
+ void setReadListener(ReadListener r): Gán một đối tượng Listener đến dòng đầu vào, trong đó có các phương thức Callback không đồng bộ đọc dữ liệu từ các dòng đầu vào.
+ isReady(): Trả về một giá trị boolean chỉ ra rằng dữ liệu có thể được đọc mà không ngăn chặn.
+ isComplete(): Trả về một giá trị boolean để chỉ hoàn tất đọc tất cả các dữ liệu trong Stream.
- Sau đây là các phương pháp được cung cấp bởi javax.servlet.Server OutputStream:
+ void setWriteListener(WriteListener w): Gán một đối tượng Listener đến dòng đầu ra trong đó có các phương thức Callback không đồng bộ ghi dữ liệu vào dòng đầu ra.
+ isReady(): Trả về cho dù các hoạt động viết có thể được hoàn thành mà không ngăn chặn.
- Đoạn code trạng thái HTTP (HTTPStatus) cũng được bao gồm trong trường hợp phản ứng HTTP. Nó khác nhau được thể hiện như sau:
- Phiên HTTP (HTTPSession) cũng có thể yêu cầu cookie được đặt trên phía máy khách. Những cookie này có các thông tin session sẽ được gửi đến các Client từ các máy chủ.
VI. Các lớp Listener:
- javax.servlet.AsyncListener: Nếu có sự thay đổi trạng thái của một hoạt động không đồng bộ được khởi xướng bởi một đối tượng ServletRequest. Các sự kiện không đồng bộ được kích hoạt do một ServletRequest là loại javax.servlet.AsyncEvent.
- javax.servlet.ServletContextListener: Khi một sự kiện chu kỳ như khởi tạo của một Servlet xảy ra. Các đối tượng sự kiện tương ứng là javax.servlet.ServletContextEvent.
- javax.servlet.ContextAttributeListener: Khi có sự thay đổi trong các thuộc tính của các sự kiện, chu kỳ của Servlet. Các sự kiện tương ứng là javax.servlet.ContextAttributeEvent.
- javax.servlet.ServletRequestListener: Nếu nhận được yêu cầu Servlet hoặc gửi ra một yêu cầu từ các ứng dụng Web. Các sự kiện tương ứng là, javax.servlet.ServletRequestEvent.
- javax.servlet.ServletRequestAttributeListener: Nếu có sự thay đổi trong các thuộc tính của các yêu cầu Servlet. Các sự kiện tương ứng là, javax.servlet.RequestAttributeEvent.
- javax.servlet.http.HttpRequestListener: Khi có yêu cầu HTTP được nhận từ các thành phần khác hoặc khi yêu cầu HTTP được gửi đến các thành phần khác của ứng dụng.
- javax.servlet.http.HttpSessionBindingListener: khi một đối tượng nhất định là bị ràng buộc hoặc chưa cam kết một phiên HTTP. Các sự kiện tương ứng là, javax.servlet.http.HttpSessionBindingEvent.
- javax.servlet.http.HttpSessionAttributeListener: Khi có sự thay đổi trong các thuộc tính của một phiên HTTP.
- javax.servlet.http.HttpSessionActivationListener: Phiên HTTP có thể được thụ động thay vì loại bỏ chúng khỏi bộ nhớ và một lần nữa kích hoạt khi có một yêu cầu cho các Servlet. Khi kích hoạt phiên HTTP xảy ra, đối tượng Listener này được thông báo.
VII. RequestDispatcher:
- Một đối tượng RequestDispatcher được sử dụng để chuyển tiếp yêu cầu các nguồn lực hoặc thêm một tài nguyên trong một phản ứng. Các nguồn tài nguyên có thể là năng động hay tĩnh.
- Một tên đường dẫn tương đối có thể được chỉ định, tuy nhiên, nó có thể không kéo dài bên ngoài bối cảnh servlet hiện hành.
- Nếu đường dẫn bắt đầu với một dấu "/" nó được hiểu là liên quan đến gốc bối cảnh hiện nay.
- Nó bao gồm hai phương thức như sau:
+ void forward (ServletRequest request, ServletResponse response)
+ void include (ServletRequest request, ServletResponse response)
VIII. Xử lý không đồng bộ:
- Trong khi thực hiện các servlet và các bộ lọc trong một ứng dụng, nếu việc thực đạt đến một trạng thái chặn, sau đó thực hiện các chủ đề được bàn giao cho một bối cảnh không đồng bộ và lợi nhuận mà không tạo ra các phản ứng.
- Giao diện javax.servlet.AsyncContext cung cấp các chức năng cần thiết cho việc xử lý không đồng bộ.
- Sau đây là một số phương pháp được cung cấp bởi lớp AsyncContext:
+ void start(Runnable r) - Thông qua phương pháp này, thùng chứa cung cấp một ví dụ chủ đề mới để thực hiện các hoạt động đó là ngăn chặn các servlet ứng dụng được rút ra khỏi thùng chứa.
+ getRequest() - Trả về một đối tượng ServletRequest để trả lại yêu cầu đó đã bắt đầu quá trình thiết lập một bối cảnh không đồng bộ.
+ getResponse() - Trả về một đối tượng ServletResponse. Nó có thể được sử dụng để tạo ra các đáp ứng với yêu cầu Servlet từ bối cảnh không đồng bộ.
+ complete() - Hoàn thành các hoạt động không đồng bộ và trả về đáp ứng cho Client mà đã yêu cầu các hoạt động.
+ dispatch() - Chấp nhận các đường dẫn gửi đi như một tham số và công văn yêu cầu và phản ứng của các bối cảnh không đồng bộ.
IX. Non-blocking I/O
- Non-blocking I/O được sử dụng để xử lý yêu cầu và phản ứng để cải thiện hiệu suất của các ứng dụng Java. Sau đây các bước tóm tắt việc thực hiện các non-blocking I/O:
+ Khởi đầu một chế độ không đồng bộ cho các yêu cầu/phản ứng.
Không có nhận xét nào:
Đăng nhận xét