zoukankan      html  css  js  c++  java
  • Servlet过滤器与监听器

    过滤器

    顾名思义是起到过滤的作用,所有的请求在真正到达servlet之前都会首先经过过滤器过滤一遍。

    过滤器也是Servlet的一种,因此也有init和destroy方法,还有一个服务方法,只是这里提供的服务是过滤;

    一个Servlet要想成为过滤器需要实现javax.servlet.Filter接口;

    一般客户端发出请求后会交给Servlet;如果过滤器存在,则客户端发出的请求都是先交给过滤器,然后交给Servlet;

    我们可以完成一些在执行Servlet之前必须要做的事,比如request.setCharacterEncoding("GBK");

    必须实现以下方法:

    1.public void init(FilterConfig config) throws ServletException{}   //   init方法在Web容器启动时就会调用;
    
    2.public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){}  // doFilter的参数是ServletRequest和ServletResponse而不是Http的;
    
    3.public void destroy(){}//应用被关闭时调用

    在实现doFilter方法时一定要执行如下操作:

    public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){
    
        chain.doFilter(req,resp);        //向servlet传递请求,否则servlet无法执行
    
    }
    

      

    那么过滤器可以用来干嘛呢?大家可以做两个简单的案例:

    案例1:统一设置字符集

    案例2:拦截URL,不登录不允许直接访问页面

    监听器

    监听器顾名思义就是监听某种事件的发生,即当某个事件发生时,就触发了某个设置好的监听器,但是这里触发的原因不同。

    例如地震监测仪器监听地震的发生,大气监测仪,监测空气的变化以提供预警。

    在servlet中因监听对象的不同也分为不同的监听器,这里指的监听对象是application、session对象,每种对象有各自的监听器。

    1.application监听器:ServletContextListener

    需要实现的方法:

    (1)public void contextInitialized(ServletContextEvent e);       //在application创建时就调用
    
    (2)public void contextDestroyed(ServletContextEvent e);        //当application销毁时调用
    
    ServletContextEvent的getServletContext()方法可以取得application对象;
    

     

    创建完成监听器后需要在web.xml中做如下配置

    <listener>标签是单独出现的

    包含一个子标签,指定了监听类的全称(包名+类名)

    2.application属性监听器:ServletContextAttributeListener

    需要实现的方法:

    (1)public void attributeAdded(ServletContextAttributeEvent e);         
    //当调用application.setAttribute()时调用 (2)public void attributeRemoved(ServletContextAttributeEvent e);
    //当调用applcaition.removeAttribute()时调用 (3)public void attributeReplaced(ServletContextAttributeEvent e);
    //当调用两次application.setAttribute()赋予相同属性时调用

    参数ServletContextAttributeEvent可以获得触发该监听器的属性名称和属性值,方法有:

     

    (1)getName();  取得属性的名称;
    
    (2)getValue();   取得属性的值;(注意:返回的是Object,必须转型)

    3.session监听器:HttpSessionListener

    需要实现的方法:

    (1)public void sessionCreated(HttpSessionEvent e);                //当打开一个浏览器时,就会触发这个方法;
    
    (2)public void sessionDestroyed(HttpSessionEvent e);            //当调用session.invalidate();或超时时调用

    HttpSessionEvent的方法getSession()获得触发监听器的session对象;  

    销毁session常用的有2种方式:

    (1)session.invalidate();//直接销毁

    (2)在web.xml中设置超时时间://所有session起作用

    4.session属性监听器:HttpSessionAttributeListener

    需要实现的方法:

    (1)public void attributeAdded(HttpSessionBindingEvent e);        
    //当调用session.setAttribute()时调用 (2)public void attributeRemoved(HttpSessionBindingEvent e);
    //当调用session.removeAttribute()时调用 (3)public void attributeReplaced(HttpSessionBindingEvent e);
    //当调用两次session.setAttribute()赋予相同属性时调用

      

    HttpSessionBindingEvent 方法:

    (1)getSession();//获取触发监听器的session

    (2)getName();//获取属性名称

    (3)getValue();//获取属性值

    监听器应用场景

    ServletContextListener:在任何Servlet提供服务之前执行、在Servlet销毁时执行,用于提前初始化一些资源,比如数据库连接、销毁一些资源,比如数据库连接;

    ServletContextAttributeListener:上下文中添加、删除、替换了属性;

    HttpSessionListener:多少个在线用户,即跟踪会话;

    HttpSessionAttributeListener:会话属性添加、删除、替换;

     心得:

    今天的成功是因为昨天的积累,明天的成功则依赖于今天的努力。成功需要一个过程。
  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/www-tty-com/p/13660997.html
Copyright © 2011-2022 走看看