1. Vòng đời một servlet trong java
Vòng đời một servlet được kiểm soát bởi container mà servlet được triển khai. Khi một request được gắn với một servlet, container sẽ thực hiện các bước sau:
a. Nếu một thể hiện (instance) của servlet không tồn tại, container sẽ:
- Tải lớp servlet
- Tạo một thể hiện của lớp servlet
- Khởi tạo thể hiện của servlet bằng cách gọi hàm init.
b. Gọi hàm service, và chuyển tham số đầu vào là đối tượng request và response.
2. Nếu container muốn loại bỏ servlet, nó sẽ gọi hàm destroy.
Kiểm soát các sự kiện trong vòng đời của servlet.
Bạn có thể giám sát và thực hiện các công việc dựa vào việc lắng nghe các sự kiện trong vòng đời của servlet. Bảng dưới đây là danh sách các sự kiện có thể được giám sát và thực thi. Khi một sự kiện lắng nghe (Listener method) được gọi, nó sẽ phát sinh ra các tham số sự kiện bao gồm các thông tin tương ứng với từng sự kiện. Ví dụ với các hàm trong HttpSessionListener sẽ được chuyển tham số HttpSessionEvent, được bao hàm trong HttpSession.
Object | Event | Listener Interface and Event Class |
---|---|---|
Web context (see Accessing the Web Context) | Initialization and destruction | javax.servlet.ServletContextListener and ServletContextEvent |
Attribute added, removed, or replaced | javax.servlet.ServletContextAttributeListener and ServletContextAttributeEvent | |
Session (See Maintaining Client State) | Creation, invalidation, activation, passivation, and timeout | javax.servlet.http.HttpSessionListener, javax.servlet.http.HttpSessionActivationListener, and HttpSessionEvent |
Attribute added, removed, or replaced | javax.servlet.http.HttpSessionAttributeListener and HttpSessionBindingEvent | |
Request | A servlet request has started being processed by web components | javax.servlet.ServletRequestListener and ServletRequestEvent |
Attribute added, removed, or replaced | javax.servlet.ServletRequestAttributeListener and ServletRequestAttributeEvent |
Dưới đây là một ví dụ:
import database.BookDBAO; import javax.servlet.*; import util.Counter; import javax.ejb.*; import javax.persistence.*; public final class ContextListener implements ServletContextListener { private ServletContext context = null; @PersistenceUnit EntityManagerFactory emf; public void contextInitialized(ServletContextEvent event) { context = event.getServletContext(); try { BookDBAO bookDB = new BookDBAO(emf); context.setAttribute("bookDB", bookDB); } catch (Exception ex) { System.out.println( "Couldn’t create database: " + ex.getMessage()); } Counter counter = new Counter(); context.setAttribute("hitCounter", counter); counter = new Counter(); context.setAttribute("orderCounter", counter); } public void contextDestroyed(ServletContextEvent event) { context = event.getServletContext(); BookDBAO bookDB = context.getAttribute("bookDB"); bookDB.remove(); context.removeAttribute("bookDB"); context.removeAttribute("hitCounter"); context.removeAttribute("orderCounter"); } }
3. Định nghĩa lớp lắng nghe các sự kiện:
Có thể định nghĩa các lớp lắng nghe sự kiện thông qua listener của phần định nghĩa trong project.
Có thể dùng netbean để định nghĩa, theo các bước sau:
- Mở ứng dụng.
- Chọn WEB-INF
- Bấm kép vào web.xml
- Bấm tab General.
- Mở phần Web Application Listener.
- Chọn Add.
- Trong cửa sổ Add, chỉ tới lớp đã định nghĩa
- Chọn Ok
Kiểm soát lỗi của servlet
Bất cứ khi nào xảy ra lỗi trong servlet, hệ thống , container sẽ sinh ra một trang mặc định với nội dung: A Servlet Exception Has Occurred
Nhưng ta có thể định nghĩa lại nội dung trang trả về mặc định này. Xem thêm tại Mapping Errors to Error Screens
Không có nhận xét nào:
Đăng nhận xét