javaee-监听器
土豆 2022/12/14 java
# 入门
监听request--->ServletRequestListener 监听request对象的创建和销毁
requestInitialized(ServletRequestEvent sre)
//创建requestDestroyed(ServletRequestEvent sre)
//销毁- 注意: 形参可以获取监听的request对象
sre.getServletRequest();
1.创建一个实现了指定接口的java类,如ServletRequestListener
public class MyListener implements ServletRequestListener{
//request对象销毁
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("我被销毁了");
}
//request对象创建
@Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("我被创建了");
}
}
2.配置监听器
<!-- 配置监听器 -->
<listener>
<listener-class>com.zh.listener.MyListener</listener-class>
</listener>
运行结果
浏览器:
http://localhost:8000/Listener/test
控制台:
我被创建了
我被销毁了
3.分析
访问http://localhost:8000/Listener/任意
都可打印:
我被创建了
我被销毁了
原因:
客户端每一次访问都会创建一个request对象
# 监听request
//监听器
public class MyListener implements ServletRequestAttributeListener{
//监听request作用域数据的添加
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("-------request增加的数据----------");
System.out.println(srae.getName()+":"+srae.getValue());
}
//监听request作用域数据的删除
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
}
//监听request作用域数据的修改
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
// TODO Auto-generated method stub
}
}
测试servlet
//测试servlet
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//响应处理结果
resp.getWriter().write("this is listener study");
//处理请求信息
req.setAttribute("str", "request对象里添加数据");
}
}
运行结果
浏览器:
http://localhost:8000/Listener/test
控制台:
-------request增加的数据----------
str:request对象里添加数据
# 监听session
//监听器
public class MyListener implements HttpSessionListener,HttpSessionAttributeListener{
//session的创建
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session被创建了");
}
//session的销毁
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session被销毁了");
}
/*-----------------------------------------------------------*/
@Override
//session作用域添加数据
public void attributeAdded(HttpSessionBindingEvent event) {
System.out.println("session中添加了一条数据"+event.getName()+":"+event.getValue());
}
//session作用域删除数据
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
System.out.println("session中删除了一条数据");
}
//session作用域修改数据
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
System.out.println("session中修改了一条数据"+event.getName()+":"+event.getValue());
}
}
测试servlet
//测试servlet
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//session创建
HttpSession hs = req.getSession();
//session添加数据
hs.setAttribute("str", "session中增加数据");
//session修改数据
hs.setAttribute("str", "session中修改的数据");
//session删除数据
hs.removeAttribute("str");
//session销毁
hs.invalidate();
}
}
运行结果
浏览器:
http://localhost:8000/Listener/test
控制台:
session被创建了
session中添加了一条数据str:session中增加数据
session中修改了一条数据str:session中增加数据
session中删除了一条数据
session被销毁了
# 监听context
//监听器
public class MyListener implements ServletContextListener,ServletContextAttributeListener{
//ServletContext的创建
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext被创建");
}
//ServletContext的创建
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext被销毁");
}
/*-----------------------------------------------------------*/
//ServletContext作用域添加数据
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("ServletContext中添加了一条数据"+event.getName()+":"+event.getValue());
}
//ServletContext作用域删除数据
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println("ServletContext中删除了一条数据");
}
//ServletContext作用域修改数据
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
System.out.println("ServletContext中修改了一条数据"+event.getName()+":"+event.getValue());
}
}
测试servlet
//测试servlet
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//session创建
ServletContext sc = this.getServletContext();
//session添加数据
sc.setAttribute("str", "ServletContext中增加数据");
//session修改数据
sc.setAttribute("str", "ServletContext中修改的数据");
//session删除数据
sc.removeAttribute("str");
}
}
运行结果
服务器启动:
ServletContext被创建
浏览器:
http://localhost:8000/Listener/test
控制台:
ServletContext中添加了一条数据str:ServletContext中增加数据
ServletContext中修改了一条数据str:ServletContext中增加数据
ServletContext中删除了一条数据
服务器关闭:
ServletContext被销毁