zoukankan      html  css  js  c++  java
  • request监听器

    一.监听器的概念:
      所谓的监听器就是对内置对象的状态或者属性进行监听并且做出反应的特殊的 servlet,
      暂时也需要再 web.xml 文件中对监听器进行相关的配置.

    对属性和状态监听:
      内置对象有两种状态变化: 产生, 销毁,
      当产生内置对象的时候能监听, 销毁的时候也能进行监听,
      当内置对象中增加, 删除, 修改一个属性的时候也能进行监听.

    二.监听 request 内置对象的状态
      监听 request 状态,要实现 request 内置对象的状态监听需要实现一个接口"javax.servlet.ServletRequestListener".

    Demo : 定义监听器
    1.定义 request 内置对象的状态监听器

     1 public class RequestListener implements ServletRequestListener{
     2     @Override
     3     public void requestDestroyed(ServletRequestEvent arg0) {
     4         System.out.println("销毁 request 内置对象");
     5     }
     6     @Override
     7     public void requestInitialized(ServletRequestEvent arg0) {
     8         System.out.println("创建 request 内置对象");
     9     }
    10 }

    2.配置 request 内置对象的状态监听器

    1   <!-- 配置 request 内置对象的状态监听器 -->
    2   <listener>
    3       <listener-class>com.sxt.mvcpro.listener.RequestListener</listener-class>
    4   </listener>

    Demo: 使用 request 监听器观察客户端跳转和服务器跳转

    1 @SuppressWarnings("serial")
    2 public class EmpServlet extends HttpServlet{
    3     @Override
    4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5 //        req.getRequestDispatcher("/pages/welcome.jsp").forward(req, resp);
    6         resp.sendRedirect("/MvcPro/pages/welcome.jsp");
    7     }
    8 }

    服务端:             客户端:
      创建 request 内置对象        创建 request 内置对象
      销毁 request 内置对象        销毁 request 内置对象
                       创建 request 内置对象
                       销毁 request 内置对象

    总结:
      服务端跳转只创建了一个 request 内置对象, 所以本质就发送了一个请求
      客户端跳转回创建新的 request 内置对象, 一共创建了两个 request 内置对象, 所以发送了两次请求.

    三. 监听 request 内置对象的属性变化
      要实现 request 对象的属性监听变化需要另外一个接口 "ServletRequestAttributeListener"

    Demo: 监听 request 的属性变化
    1.定义 request 内置对象的属性监听器

     1 public class RequestAttributeListener implements ServletRequestAttributeListener{
     2     @Override
     3     public void attributeAdded(ServletRequestAttributeEvent event) {
     4         System.out.println("增加属性时候触发: " + event.getName() + ":" + event.getValue());
     5     }
     6     @Override
     7     public void attributeRemoved(ServletRequestAttributeEvent event) {
     8         System.out.println("删除属性时候触发: " + event.getName() + ":" + event.getValue());
     9     }
    10     @Override
    11     public void attributeReplaced(ServletRequestAttributeEvent event) {
    12         System.out.println("替换属性时候触发: " + event.getName() + ":" + event.getValue());
    13     }
    14 }

    2.配置 request 内置对象的属性监听器

      <listener>
          <listener-class>com.sxt.mvcpro.listener.RequestAttributeListener</listener-class>
      </listener>

    3.测试监听器

     1 @SuppressWarnings("serial")
     2 public class EmpServlet extends HttpServlet{
     3     @Override
     4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     5         //增加属性
     6         req.setAttribute("name", "李四");
     7         //替换属性
     8         req.setAttribute("name", "张三");
     9         //删除属性
    10         req.removeAttribute("name");
    11     }
    12 }
  • 相关阅读:
    Elasticsearch Network Settings
    Spring Application Event Example
    hibernate persist update 方法没有正常工作(不保存数据,不更新数据)
    快速自检电脑是否被黑客入侵过(Linux版)
    快速自检电脑是否被黑客入侵过(Windows版)
    WEB中的敏感文件泄漏
    Nginx日志分析
    关系型数据库设计小结
    软件开发的一些"心法"
    关于DNS,你应该知道这些
  • 原文地址:https://www.cnblogs.com/yslf/p/10749158.html
Copyright © 2011-2022 走看看