1.概述
sun公司定义了八大监听器,用来监听web开发中对应的事件
2.监听器开发步骤
(1)写一个类实现监听器对应的接口
public class MyHttpSessionListener implements HttpSessionListener
(2)再web.xml中配置监听器
<!--配置监听器-->
<listener>
<listener-class>cn.tedu.listener.MyHttpSessionListener</listener-class>
</listener>
3.八大监听器介绍
监听三大作用域创建和销毁的监听器(三个)
ServletContextListener
HttpSessionListener
ServletRequestListener
这三个监听器中都提供了两个方法,分别用来监听对应域的创建和销毁
监听三大作用域中属性变化的监听器(三个)
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
这三个监听器中都提供了三个方法,分别用来监听对应域中属性的增加、删除、修改
监听session中对象变化的监听器和session钝化的监听器(此处只做了解)
代码示例:
先在类SessionDemo1中设置session的值,然后sessiondemo2中修改session中的值,sessiondemo3杀死session。
类MyHttpSessionListener继承HttpSessionListener监听域对象的创建销毁。
类MySessionAttributeListener继承HttpSessionAttributeListener监听域对象中属性的变化。
依次执行sessiondemo1,sessiondemo2,sessiondemo3,。监听器输出的结果如下:
所有测试类的代码如下:
sessiondemo1
package cn.tedu.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @author wyy
* @date 2020/6/19 12:29
*/
@WebServlet(name = "SessionDemo1",urlPatterns = "/sessiondemo1")
public class SessionDemo1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session
HttpSession session = request.getSession();
//向session中存入域属性
session.setAttribute("friend","李四");
session.setAttribute("score",60);
System.out.println("sessiondemo1:"+session.getAttribute("friend"));
}
}
sessiondemo2
package cn.tedu.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @author wwy
* @date 2020/6/19 12:29
*/
@WebServlet(name = "SessionDemo2",urlPatterns = "/sessiondemo2")
public class SessionDemo2 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session
HttpSession session = request.getSession();
//从session中获取域属性
String friend = (String) session.getAttribute("friend");
int score = (int) session.getAttribute("score");
//修改属性
session.setAttribute("friend","张三");
//删除属性
session.removeAttribute("friend");
System.out.println("sessiondemo2:"+friend+"@"+score);
}
}
sessiondemo3
package cn.tedu.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @author wwy
* @date 2020/6/19 12:29
*/
@WebServlet(name = "SessionDemo3",urlPatterns = "/sessiondemo3")
public class SessionDemo3 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//杀死session
request.getSession().invalidate();
}
}
MyHttpSessionListener
package cn.tedu.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* 监听器SessionListener 示例
* @author wyy
* @date 2020/6/22 17:03
*/
public class MyHttpSessionListener implements HttpSessionListener {
/**
* 当session被创建时触发此方法
* @param httpSessionEvent 被创建的事件,可以设置一些属性等 如:
* httpSessionEvent.getSession().setAttribute("msg","success");
*/
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("session被创建了");
}
/**
* 当session销毁时触发此方法
* @param httpSessionEvent 被创建的事件,可以设置一些属性等
*/
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("session被销毁了");
}
}
MySessionAttributeListener
package cn.tedu.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
* 监听三大作用域中属性变化的监听器示例
* @author wyy
* @date 2020/6/22 17:19
*/
public class MySessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("属性增加了");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("属性删除了");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("属性修改了");
}
}