目录
10.3.2 监听:
1、
2、 ServletRequestListener:监听request对象的创建和销毁
3、添加:ServletRequestAttributeListener:监听request作用域属性的添加,删除和更改
4、添加:ServletContextListener监听servletcontext对象的属性的添加和删除和更改
5、添加:ServletContextAttributeListener监听servletcontext对象的属性的添加和删除和更改
6、添加:HttpSessionListener监听session对象的创建和销毁
7、添加:HttpSessionAttributeListener监听session对象的创建和销毁
监听实现网站在线人数案例:
Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以设置一些事件
Servlet2.3提供了对ServletContext和HttpSession对象的状态变化的监听器,Servlet2.4则增加了对ServletRequest对象状态变化的监听器
①、ServletContext对象----监听ServletContext对象,可以使web应用得知web组件的加载和卸载等运行情况
②、HttpSession对象----监听HttpSession对象,可以使web应用了解会话期间的状态并做出反应
③、ServletRequest对象----监听ServletRequest对象,可以使web应用控制web请求的生命周期
web.xml文件:
ListenseServlet
com.mashibing.servlet.ListenseServlet
ListenseServlet
/listense
com.mashibing.listense.MyListense
com.mashibing.listense.MyListense2
java文件:ListenseServlet(监听程序)
public class ListenseServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("listenseservlet逻辑处理");
request.setAttribute("listense","listense");
request.removeAttribute("listense"); //被删除的数据(不显示)
========================== 下面对应的5 ===========================
//向servletcontext中添加属值
ServletContext sc = this.getServletContext();
sc.setAttribute("servletContext","servletContext--value");
========================= 对应下面的6、7 =========================
//向session作用域中添加属性
HttpSession session = request.getSession();
session.setAttribute("session","session--value");
session.invalidate();
=====================================================================
response.getWriter().write("listense study");
}
}
分为:(通过绿色填充标记)
1、request接口
2、servletcontext接口
3、Session接口
java文件:MyListense(监听器)
public class MyListense implements ServletRequestListener,
ServletRequestAttributeListener,
ServletContextListener,
ServletContextAttributeListener,
HttpSessionListener,
HttpSessionAttributeListener
{
//请求销毁(request对象销毁时添加的逻辑代码)
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("request对象被销毁---" + new Date());
}
//请求创建(reques对象创建时添加的逻辑代码)
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("request对象被创建---"+new Date());
}
web.xml文件:
com.mashibing.listense.MyListense2
java文件:MyListense(监听器)
//添加属性(属性添加时要做的事情)
@Override
public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("向request作用域添加数据");
System.out.println(servletRequestAttributeEvent.getName());
System.out.println(servletRequestAttributeEvent.getValue());
}
//删除属性(属性删除时要做的事情)
@Override
public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("request作用域删除数据");
System.out.println(servletRequestAttributeEvent.getName());
System.out.println(servletRequestAttributeEvent.getValue());
}
//替换属性(属性更改时要做的事情)
@Override
public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {
System.out.println("request作用域属性替换");
System.out.println(servletRequestAttributeEvent.getName());
System.out.println(servletRequestAttributeEvent.getValue());
}
java文件:MyListense(监听器
//创建属性(当启动tomcat服务器的时候创建)
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("servletContext创建");
}
//销毁属性(关闭tomcat服务器的时候销毁)
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("servletContext销毁");
}
java文件:MyListense(监听器)
//添加属性
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("servletContext添加属性");
System.out.println(servletContextAttributeEvent.getName());
System.out.println(servletContextAttributeEvent.getValue());
}
//删除属性
@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("servletContext删除属性");
System.out.println(servletContextAttributeEvent.getName());
System.out.println(servletContextAttributeEvent.getValue());
}
//修改属性
@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
System.out.println("servletContext修改属性");
System.out.println(servletContextAttributeEvent.getName());
System.out.println(servletContextAttributeEvent.getValue());
}
java文件:MyListense(监听器)
(session对象创建的时候执行)
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("session对象被创建");
}
(session对象销毁的时候执行)
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("session对象被销毁");
}
java文件:MyListense(监听器)
(添加属性时被调用)
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("session添加属性");
System.out.println(httpSessionBindingEvent.getName());
System.out.println(httpSessionBindingEvent.getValue());
}
(删除属性时被调用)
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("session删除属性");
System.out.println(httpSessionBindingEvent.getName());
System.out.println(httpSessionBindingEvent.getValue());
}
(修改属性时被调用)
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("session修改属性");
System.out.println(httpSessionBindingEvent.getName());
System.out.println(httpSessionBindingEvent.getValue());
}
}
java文件:MyListense2(监听器2)
public class MyListense2 implements HttpSessionListener,ServletContextListener {
@Override//创建属性(当启动tomcat服务器的时候创建)
public void contextInitialized(ServletContextEvent servletContextEvent) {
//获取application
ServletContext sc = servletContextEvent.getServletContext();
//设置网站在线人数的初始值
sc.setAttribute("count",0);
}
@Override//销毁属性(关闭tomcat服务器的时候销毁)
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("servletContext被销毁");
}
@Override(session对象创建的时候执行)
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//获取application对象
ServletContext sc = httpSessionEvent.getSession().getServletContext();
int count = (int)sc.getAttribute("count"); //强制转换
sc.setAttribute("count",++count);
}
@Override(session对象销毁的时候执行)
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//获取application对象
ServletContext sc = httpSessionEvent.getSession().getServletContext();
int count = (int)sc.getAttribute("count"); //强制转换
sc.setAttribute("count",--count);
}
}
jsp文件:main
添加:
当前在线的人数是:${applicationScope.count}
web.xml文件:
com.mashibing.listense.MyListense2