javaWeb监听器笔记

1、监听对象:ServletContext、HttpSession、ServletRequest

2、具体操作:
    实现接口:javax.servlet.ServletContextListener
    配置web.xml:
    <listener>
        <listener-class>cn.lxj.listener.FirstListener</listener-class>
    </listener>

3、监听器启动顺序
    按照注册的加载顺序,从上到下执行

4、执行优先顺序:监听器 > 过滤器 > Servlet

5、ServletContext(应用程序环境)对象监听:
        接口:ServletContextListener
            方法:contextInitialized(ServletContextEvent arg0) //创建时调用
                    ServletContext context = arg0.getServletContext();
                    //在这里设置内容,其他地方获取到context对象可以获取到此地方设置的属性
                    context.setAttribute("xxx", "1111"); 
                    String s = context.getInitParameter("config"); //获取配置文件信息
                    web.xml:
                        <context-param>
                            <param-name>config</param-name>
                            <param-value>1111</param-value>
                        </context-param>

                contextDestroyed(ServletContextEvent arg0)   //销毁时候调用,用于释放一些资源

        用途:定时器、全局属性对象   

   HttpSession(用户会话)对象监听:
        接口:HttpSessionListener
            方法 sessionCreated(HttpSessionEvent arg0) // 打开页面session对象创建调用
                sessionDestroyed(HttpSessionEvent arg0) // session对象销毁调用
                    arg0.getSession().setAttribute("name","张三"); //session对象设置
        用途:记录在线人数、记录访问日志

   ServletRequest(监听请求消息)
        接口:ServletRequestListener
            方法:requestInitialized(ServletRequestEvent arg0) //当前请求开始调用
                requestDestroyed(ServletRequestEvent arg0) //当前请求结束调用
                    ServletRequest request = arg0.getServletRequest();//request对象
                    String name = request.getParameter("name");
        用途:记录在线人数、记录访问日志       

6、监听域对象中的属性添加、删除    
    ServletContext:
        接口:ServletContextAttributeListener
    HttpSession:
        接口:HttpSessionAttributeListener
    ServletRequest:
        接口:ServletRequestAttributeListener

    attributeAdd  :增加
        request.setAttribute("requestName", "requestName"); //每次访问
        request.getSession().setAttribute("sessionName", "sessionName");//第一次访问
        request.getSession().getServletContext().setAttribute("contextName", "contextName"); //第一次访问

    attributeRemove :删除
        request.removeAttribute("requestName");
        request.getSession().removeAttribute("sessionName");
        request.getSession().getServletContext().removeAttribute("contextName");

    attributeReplace :
        request.setAttribute("requestName", "requestName"); //未销毁之前在设置一次
        request.getSession().setAttribute("sessionName", "sessionName");//第二次访问
        request.getSession().getServletContext().setAttribute("contextName",  "contextName"); //第二次访问

7、监听绑定到HttpSession某个域中某个对象的状态事件监听器:
    HttpSession中对象状态:
        绑定-->解除绑定    钝化(将session从内存持久化到存储设备上)-->活化(将session从存储设备上恢复到内存)
    ![这里写图片描述](http://img.blog.csdn.net/20171213170205685?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    Servlet规范:
        接口:HttpSessionBindingListener(不需要在web.xml注册)
            绑定:valueBound()
            解除绑定:valueUnbound()
        接口:HttpSessionActivationListener(不需要在web.xml注册)
            钝化:sessionWillPassivate()
            活化:sessionDidActivate()

HttpSessionBindingListener、HttpSessionActivationListener实例::

public class User implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable {

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private String username;
    private String password;

    public void valueBound(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("valueBound:"+arg0.getName());
    }

    public void valueUnbound(HttpSessionBindingEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("valueUnbound:"+arg0.getName());
    }

    /**
     * 活化方法 ,磁盘->内存(用户访问)
     * @param arg0
     */
    public void sessionDidActivate(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("sessionDidActivate:");
    }
    /**
     * 钝化方法 ,内存->磁盘(停止服务器等操作)
     * @param arg0
     */
    public void sessionWillPassivate(HttpSessionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("sessionWillPassivate:");
    }
}
页面:
request.getSession.setAttribute("user", new cn.lxj.model.User)//触发valueBound
request.getSession.removeAttribute("user") //触发valueUnbound
【注】:想钝化、活化必须要实现Serializable 


Persistentmanager配置:tomcat/conf/context.xml中
<Manager path="" />



8 Servlet3.0下监听器的应用(上面说的都是Servlet2.5下的应用):
    如何查看Servlet版本:打开web.xml上面显示是2.53.0等
    使用Servlet3.0条件:
        使用Servlet3.0新标准jar包
        jdk必须在1.6以上版本
        编译器编译级别6.0以上
        在web.xml文件中使用3.0以上规范
        使用支持Servlet3.0特性的容器,比如Tomcat7及以上

    8.1 @WebListener
    条件:该注解用于将类生命为监听器,被@WebListener标注的类必须实现以下至少一个接口:
            ServletContextListener
            ServletContextAttributeListener
            ServletRequestListener
            ServletRequestAttributeListener
            HttpSessionListener
            HttpSessionAttributeListener
        【注】:无法定义监听器顺序

    属性:value ,String类型,可选,该监听器的描述信息
    【对比】:
    2.5:
    <listener>
        <listener-class>cn.lxj.listener.FirstSessionListener</listener-class>
    </listener>
    3.0:
    @WebListener("this is a demo")
    public class FirstSessionListener implements HttpSessionListener{...}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值