javaweb笔记(监听器,注释配置)

4.13 监听器

监听器用于监听对象的上的事件发生,在Servlet中监听器主要监听请求对象、会话对象、上下文对象以及监听这些对象的作用域操作。JavaEE为我们提供了一系列的监听器接口,开发时按需实现相应的接口即可。

4.13.1 监听作作用域对象的创建与销毁

监听器说明
ServletRequestListener监听请求对象的创建和销毁
HttpSesisonListener监听会话对象的创建和销毁
ServletContextListener监听Servlet上下文对象的创建和销毁

代码示例:

1.请求对象监听器


public class DemoRequestListener implements ServletRequestListener{

    /**
     * 当请求对象销毁后容器执行此方法
     * 销毁方法中同样也有一个ServletRequestEvent事件对象
     */
    @Override
    public void requestDestroyed(ServletRequestEvent event) {
        //通过这个事件对象就可以获取当前的请求对象
        HttpServletRequest request = (HttpServletRequest)event.getServletRequest();
        System.out.println("销毁请求对象..."+request);
    }

    /**
     * 当请求对象创建之后容器调用此方法
     * ServletRequestEvent这个参数就是一个事件对象
     */
    @Override
    public void requestInitialized(ServletRequestEvent event) {
        //通过这个事件对象就可以获取当前的请求对象
        HttpServletRequest request = (HttpServletRequest)event.getServletRequest();
        System.out.println("初始化了请求对象..."+request);
    }

}

web.xml配置


<!-- 配置监听器 -->
  <listener>
    <!-- 指定监听器的完整类名 -->
  <listener-class>edu.nf.ch10.listener.DemoRequestListener</listener-class>
  </listener>

2.会话对象监听器


public class DemoSessionListener implements HttpSessionListener{

    /**
     * 监听HttpSession对象的创建
     * HttpSessionEvent参数是一个事件对象
     * 通过它可以获得当前的HttpSession
     */
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        System.out.println("创建了Session对象"+session);
    }

    /**
     * 监听HttpSession对象的销毁
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        HttpSession session = event.getSession();
        System.out.println("销毁了Session对象"+session);
    }
}

注意:当第一次调用了request.getSesison()方法创建Session时,监听器才会起作用。

web.xml配置


<listener>
    <!-- 指定监听器的完整类名 -->
    <listener-class>edu.nf.ch10.listener.DemoSessionListener</listener-class>
  </listener>

3.Servlet上下文监听器


public class DemoContextListener implements ServletContextListener{

    /**
     * 监听ServletContext的销毁
     */
    @Override
    public void contextDestroyed(ServletContextEvent event) {
        //通过事件对象获取ServletContext
        ServletContext sc = event.getServletContext();
        System.out.println("销毁了ServletContext对象..."+sc);
    }

    /**
     * 监听SerlvetContext的创建
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        //通过事件对象获取ServletContext
        ServletContext sc = event.getServletContext();
        System.out.println("创建了ServletContext对象..."+sc);
    }
}

web.xml


<listener>
    <!-- 指定监听器的完整类名 -->
    <listener-class>edu.nf.ch10.listener.DemoContextListener</listener-class>
  </listener>

4.13.2 监听作用域的操作

监听器说明
ServletRequestAttributeListener监听请求作用域的操作
HttpSessionAttributeListener监听会话作用域的操作
ServletContextAttributeListener监听Servlet上下文作用域的操作

示例代码:

这里以HttpSessionAttributeListener说明,其他作用于监听器用法相似。


public class DemoSessionAttributeListener implements HttpSessionAttributeListener{

    /**
     * 当有数据添加到会话作用域时,执行此方法
     */
    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
        //获取存入作用域的键和值
        System.out.println("存入会话作用域..."+event.getName() + " : " + event.getValue());
        
    }

    /**
     * 当从会话作用域移除数据时,执行此方法
     */
    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        System.out.println("移除会话作用域..."+event.getName() + " : " + event.getValue());
        
    }

    /**
     * 当替换了会话作用域中的某个数据时,执行此方法
     */
    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
        HttpSession session = event.getSession();
        //从session中获取的是替换之后的值
        System.out.println("替换的值: "+session.getAttribute("userName").toString());
        //注意:这里event.getValue()获取到的是替换之前的值
        System.out.println("替换会话作用域..."+event.getName() + " : " + event.getValue());
    }
}

web.xml


<listener>
    <!-- 指定监听器的完整类名 -->
    <listener-class>edu.nf.ch10.listener.DemoSessionAttributeListener</listener-class>
  </listener>

4.14 注解配置

Servlet3.0开始提供了一系列的注解来配置Servlet、Fiilter、Listener等等。这种方式可以极大的简化在开发中大量的xml的配置。从这个版本开始,web.xml可以不再需要,使用相关的注解同样可以完成相应的配置。

注解说明
@WebServlet这个注解标识在类上,用于配置Servlet。例如:@WebServlet(name="hello", urlPatterns="/hello")  也可简化配置@WebServlet("/hello")
@WebFilter这个注解标识在类上,用于配置Filter。例如:@WebFilter(filterName="encode",urlPatterns="/") 也可简化配置@WebFilter("/"),
@WebListener这个注解标识在类上,用于配置监听器

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭