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 }
  • 相关阅读:
    SQL中distinct的用法
    JMeter压测“java.net.SocketException: Socket closed”解决方法
    Jmeter里http接口的执行顺序是顺序执行
    【Web安全】越权操作——横向越权与纵向越权
    【WPF】使用CefSharp嵌入HTML网页
    【Visual Studio】项目的引用显示黄色叹号
    未能加载文件或程序集”xxxx”或它的某一个依赖项,试图加载格式不正确的程序。
    IDEA无法启动debugger,报错Address localhost:1099 is already in use
    Windows系统32位、64位DLL文件的存放位置
    Charles做代理的Map Remote路径配置
  • 原文地址:https://www.cnblogs.com/yslf/p/10749158.html
Copyright © 2011-2022 走看看