WEB-Listener&Filter篇

WEB-Listener&Filter篇

1.1     监听器:Listener

1.1.1   监听器的概述:

1.1.1.1 什么是监听器:

* 监听器:就是一个Java类,用来监听其他的Java的状态的变化.

1.1.1.2 监听器的用途:

* 用来监听其他的对象的变化的.

* 主要应用在图形化界面中比较多:

    *GUI,Android.

1.1.1.3 监听器的术语:

* 事件源:指的是被监听的对象.(汽车)

* 监听器:值的是监听的对象.(报警器)

* 事件源与监听器的绑定:就是在汽车上安装报警器.

* 事件:指的是事件源的改变.(踹汽车一脚)---主要的功能获得事件源对象.

1.1.2   WEB中的监听器的概述:

1.1.2.1 WEB中的监听器:

WEB中的Listener和Filter是属于Servlet规范中的高级的技术.

WEB中的监听器共有三类八种(监听三个域对象)

* 事件源:Servlet中的三个域对象.ServletContext,HttpSession,ServletRequest.

* 监听器:自定义类实现8个接口.

* 事件源和监听器的绑定:配置.

1.1.2.2 WEB中的监听器的分类:

三类八种:

* 一类:监听三个域对象的创建和销毁的监听器:

    * ServletContextListener

    * HttpSessionListener

    *ServletRequestListener

* 二类:监听三个域对象的属性变更的监听器(属性添加,移除,替换):

    * ServletContextAttributeListener

    *HttpSessionAttributeListener

    *ServletRequestAttributeListener

* 三类:监听HttpSession中的JavaBean的状态改变(绑定,解除绑定,钝化,活化)

    * HttpSessionBindingListener

    * HttpSessionActivationListener

1.1.2.3 WEB中的监听器的使用:

编写一个类实现监听器的接口:

通过配置文件配置监听器:

1.1.3   一类:监听三个域对象的创建和销毁的监听器:

1.1.3.1 ServletContextListener:监听ServletContext对象的创建和销毁:

【方法】:

 

【ServletContext对象的创建和销毁】:

* 创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext.

* 销毁:服务器关闭或者项目从服务器中移除的时候.

 

【应用代码】

public class MyServletContextListener implementsServletContextListener{

 

    @Override

    publicvoid contextInitialized(ServletContextEvent sce) {

        System.out.println("ServletContext对象被创建了...");

    }

 

    @Override

    publicvoid contextDestroyed(ServletContextEvent sce) {

        System.out.println("ServletContext对象被销毁了...");

    }

 

}

配置:

  <!-- 配置监听器 -->

 <listener>

    <listener-class>com.itheima.weblistener.MyServletContextListener</listener-class>

 </listener>

 

【企业中的应用:】

* 1.加载框架的配置文件     :Spring框架 ContextLoaderListener

* 2.定时任务调度:

    *Timer,TimerTask

1.1.3.2 HttpSessionListener:监听HttpSession的创建和销毁的监听器:

【方法】

 

HttpSession何时创建和销毁的】

* 创建:服务器端第一次调用getSession();

* 销毁:

    * 非正常关闭服务器(正常关闭session会序列化):

    * session过期了默认30分钟.

    * 手动调用session.invalidate();

 

HttpSession的问题】

* 访问Servlet会不会创建Session   : 不会

* 访问JSP会不会创建Session       :会.

* 访问html会不会创建Session      :不会

 

【应用的代码】

public class MyHttpSessionListener implementsHttpSessionListener{

 

    @Override

    publicvoid sessionCreated(HttpSessionEvent se) {

        System.out.println("HttpSession被创建了...");

    }

 

    @Override

    publicvoid sessionDestroyed(HttpSessionEvent se) {

        System.out.println("HttpSession被销毁了...");

    }

 

}

配置:

 <listener>

   <listener-class>com.itheima.weblistener.MyHttpSessionListener</listener-class>

 </listener>

1.1.3.3 ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器:

【方法】:

 

【request对象何时创建和销毁】:

* 创建:客户端向服务器发送一次请求,服务器就会创建request对象.

* 销毁:服务器对这次请求作出响应后就会销毁request对象.

 

【问题】:

访问一个Servlet会不会创建request对象:会

访问一个JSP会不会创建request对象:会

访问一个HTML会不会创建request对象:会

 

【应用的代码】

public class MyServletRequestListener implementsServletRequestListener{

 

    @Override

    public voidrequestDestroyed(ServletRequestEvent sre) {

        System.out.println("ServletRequest被销毁了...");

    }

 

    @Override

    publicvoid requestInitialized(ServletRequestEvent sre) {

        System.out.println("ServletRequest被创建了...");

    }

 

}

配置:

 <listener>

   <listener-class>com.itheima.weblistener.MyServletRequestListener</listener-class>

 </listener>

1.1.4   二类:监听三个域对象的属性变更的监听器:(属性添加,移除,替换)

1.1.4.1 ServletContextAttributeListener:监听ServletContext对象的属性变更:

1.1.4.2 HttpSessionAttributeListener:监听HttpSession中的属性变更:

1.1.4.3 ServletRequestAttributeListener:监听ServletRequest对象的属性变更的:

1.1.5   三类:监听HttpSession中的JavaBean的对象的状态改变的监听器

第三类监听器很特殊,不需要进行配置的.作用在JavaBean上的监听器.JavaBean可以自己感知到在Session中的状态.

1.1.5.1 HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定和解除绑定的

1.1.5.2 HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的.

* sessionDidActivate();     :--活化(反序列化)

* sessionWillPassivate();   :--钝化(序列化到硬盘)

 

***** 优化Session:

     * 通过配置<Context>标签配置定时session序列化.

         * 在tomcat/conf/context.xml中配置<Context>                       :在tomcat中所有的虚拟主机和虚拟路径都会按照这个配置执行.

         * 在tomcat/conf/Catalina/localhost/context.xml配置<Context> :在tomcat中的localhost虚拟主机中的所有虚拟路径按照这个配置执行.

         * 在当前的工程下的META-INF/context.xml配置<Context>               :当前这个工程按照配置执行.

1.2     案例一:自动登录案例.

1.2.1   需求:

在各式网站都会看到自动登录的功能,在登录页面中勾选了自动登录的复选框,那么下次访问网站首页的时候,可以不需要进行登录.

1.2.2   分析:

1.2.2.1 技术分析:

【Cookie技术】

* 利用Cookie记住用户的用户名和密码.

【Filter:过滤器的概述】

Ø  什么是过滤器Filter:可以过滤从客户端向服务器发送的请求.

Ø  过滤器的使用:

* 进行IP的过滤,脏话过滤,自动登录,响应压缩...

Ø  使用过滤器:

* 编写一个类实现Filter接口:

* 配置过滤器:

【过滤器的生命周期】:了解

Ø  过滤器的创建和销毁:

* 创建:服务器启动的时候.

* 销毁:服务器关闭的时候.

【FilterConfig:过滤器的配置对象】:

 

代码:

    publicvoid init(FilterConfig filterConfig) throws ServletException {

        // 获得当前的Filter的名称:

        String filterName =filterConfig.getFilterName();

        System.out.println(filterName);

        // 获得初始化参数:

        String username =filterConfig.getInitParameter("username");

        String password = filterConfig.getInitParameter("password");

        System.out.println(username+"   "+password);

        // 获得所有的初始化参数的名称:

        Enumeration<String> en =filterConfig.getInitParameterNames();

        while(en.hasMoreElements()){

            Stringname = en.nextElement();

            Stringvalue = filterConfig.getInitParameter(name);

            System.out.println(name+"    "+value);

        }

    }

【FilterChain:过滤器链】

过滤器链中的过滤器的执行的顺序与<filter-mapping>的配置顺序有关.

* doFilter(request,response); -- 放行,放行到下一个过滤器中,如果没有下一个过滤器,到达目标资源.

【Filter相关的配置】

Ø  <url-pattern>的配置:

* 完全路径匹配        :以 / 开始  /demo4/demo1.jsp

* 目录匹配           :以 / 开始 以 * 结束.  /* /demo1/*

* 扩展名匹配          :不能以 / 开始以 * 开始.  *.do  *.action

 

Ø  <servlet-name>的配置:根据Servlet的名称拦截Servlet.

 

Ø <dispatcher>的配置:

* REQUEST   :默认值.

* FORWARD   :转发.

* INCLUDE   :包含.

* ERROR     :错误页面跳转.(全局错误页面)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值