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ẽ:
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:
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