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被销毁