监听器的分类:
1、ServletContextListener和ServletContextAttributeListener(作用域:全局)
2、HttpsessionListener和HttpsessionAttributeListener(作用域:当前会话)
3、ServletRequestListener和ServletRequestAttributeListener(作用域:请求)
1、ServletContextListener和ServletContextAttributeListener(作用域:全局)
监听器
package com.tao.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServletContextListenerTest implements ServletContextListener {
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed................");
}
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized................");
}
}
package com.tao.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
public class ServletRequestAttributeListenerTest implements
ServletRequestAttributeListener {
public void attributeAdded(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("attributeAdded...................");
}
public void attributeRemoved(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("attributeRemoved...................");
}
public void attributeReplaced(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("attributeReplaced...................");
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext cxt=this.getServletContext();
cxt.setAttribute("age", "18");
cxt.setAttribute("age", "20");
cxt.removeAttribute("age");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("test servletContextListener");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
2、HttpsessionListener和HttpsessionAttributeListener(作用域:当前会话)
监听器
package com.tao.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class HttpSessionListenerTest implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
System.out.println("sessionCreated...............");
}
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
System.out.println("sessionDestroyed...............");
}
}
package com.tao.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class HttpSessionAttributeListenerTest implements
HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("attributeAdded.................");
}
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("attributeRemoved.................");
}
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("attributeReplaced.................");
}
}
servlet测试:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("name", "tom");
session.setAttribute("name", "BigTom");
session.removeAttribute("name");
session.invalidate();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
// out.println("Test HttpSessionListener!");
out.println("Test HttpSessionAttributeListener!");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
监听器
package com.tao.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class ServletRequestListenerTest implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent sre) {
// TODO Auto-generated method stub
System.out.println("requestDestroyed...............");
}
public void requestInitialized(ServletRequestEvent sre) {
// TODO Auto-generated method stub
System.out.println("requestInitialized...............");
}
}
package com.tao.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
public class ServletRequestAttributeListenerTest implements
ServletRequestAttributeListener {
public void attributeAdded(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("attributeAdded...................");
}
public void attributeRemoved(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("attributeRemoved...................");
}
public void attributeReplaced(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
System.out.println("attributeReplaced...................");
}
}
servlet测试:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("name", "hello");
request.setAttribute("name", "hello2");
request.removeAttribute("name");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
// out.println("Test ServletRequestListener!");
out.println("Test ServletRequestAttributeListener!");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
监听器可以用于网站登录用户的计数,以下代码简单实现:(session的创建和取消)
package com.tao.listenerCounter;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class UserCounter implements HttpSessionListener, ServletContextListener {
private int counter = 0;
private ServletContext cxt;
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
cxt = null;
}
public void contextInitialized(ServletContextEvent e) {
// TODO Auto-generated method stub
cxt = e.getServletContext();
}
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
counter++;
cxt.setAttribute("users", new Integer(counter));
}
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
counter--;
cxt.setAttribute("users", new Integer(counter));
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
ServletContext cxt = this.getServletContext();
int counter = Integer.parseInt(cxt.getAttribute("users").toString());
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("users=" + counter);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}