Servlet 中的监听器和过滤器

Servlet 中的监听器:

1.监听ServletContext,HttpSession,ServletRequest状态

2事件源和监听绑定的方式:配置

3提供了8种监听器:监听3个域对象的创建和销毁(3种),监听3个域对象的属性变更的监听器(3种), 监听HttpSession中JavaBean的状态的变化(绑定,解绑,钝化,活化 2种)

钝化:session序列化到磁盘

活化:session从磁盘序列化到内存

1 ServletContextListener(接口):监听ServletContext对象的创建和销毁.
关于ServletContext

创建:服务器启动的时候,为每个Web应用创建一个单独的ServletContext

销毁:服务器关闭的时候,或者项目移除的时候

案例:

public class MyServletContextListener implements ServletContextListener{


@Override

/**

 * 监听ServletContext对象的创建的方法:

 */

public void contextInitialized(ServletContextEvent sce) {

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

}

 

@Override

/**

 * 监听ServletContext对象的销毁的方法:

 */

public void contextDestroyed(ServletContextEvent sce) {

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

}

}

通过配置:将事件源和监听器绑定(在web.xml中)

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

  <listener>

  <listener-class>MyServletContextListener的全限定名</listener-class>

  </listener>

HttpSessionListener(和上面的步骤一致):监听HttpSession对象的创建和销毁的监听器.
关于HttpSession

创建:服务器第一次调用getSession()方法的时候

销毁:非正常关闭服务器(正常关闭序列化到磁盘)

         session过期(默认30分钟)

 session.invalidate()//手动过期

注意:

1.访问html是否创建session对象?:不会

2.访问一个Servlet是否创建session对象?:不会

3.访问一个jsp是否创建session对象?:会,jsp的内置对象

ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器(步骤同上)
每次请求服务器都会创建request对象和做出响应后respond后都会销毁

2.ServletContextAttributeListener:监听ServletContext对象中的属性变更的监听器

HttpSessionAttributeListener:监听HttpSession对象中的属性变更的监听器
ServletRequestAttributeListener:监听ServletRequest对象中的属性变更的监听器
(步骤都一样)

3监听HttpSession中的JavaBean的状态改变的监听器.(绑定,解决绑定,钝化,活化)

HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定和解除绑定的状态.(setAttribute())
HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的状态.()

监听器接口中的方法

sessionDidActivate(HttpSessionEvent se);  --活化

SessionWillPassivate(HttpSessionEvent se); --钝化


通过配置序列化session:

context.xml

* tomcat/conf/context.xml:tomcat中的所有虚拟主机和虚拟路径生效.

* tomcat/conf/Catalina/localhost/context.xml:tomcat下的localhost虚拟主机中的所有路径生效.

* 工程的META-INF/context.xml:对当前的工程生效.

 

<?xml version="1.0" encoding="UTF-8"?>

<!--

maxIdleSwap:1分钟 如果session不使用就会序列化到硬盘.

directory:itheima序列化到硬盘的文件存放的位置.

 -->

<Context>

<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">

<Store className="org.apache.catalina.session.FileStore" directory="itheima"/>

</Manager>

</Context>


过滤器

含义和作用:实现特殊接口的java类,实现对请求资源的过滤功能(自动登录,进行页面的静态化,进行响应压缩)

编写一个过滤器案例:

public class FilterDemo1 implements Filter{

 

 @Override

 public void init(FilterConfig filterConfig) throws ServletException {

 }

 

 @Override

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

 throws IOException, ServletException {

  System.out.println("FilterDemo1...");

  //放行

  chain.doFilter(request, response);

 }

 

@Override

public void destroy() {

}

 

}

1.对过滤器进行配置.(在web.xml中进行配置)

  <filter>

  <filter-name>FilterDemo1</filter-name>

  <filter-class>FilterDemo1的全限定名</filter-class>

  </filter>

  

  <filter-mapping>

  <filter-name>FilterDemo1</filter-name>

  <url-pattern>/*</url-pattern>

  </filter-mapping>

方法参数:FilterConfig的作用


Filter生命周期:服务器启动的时候,服务器就会创建过滤器的对象,每次访问被拦截目标资源,过滤器中的doFilter的方法就会执行.当服务器关闭的时候,服务器就会销毁Filter对象.

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

配置中注意事项:

url-pattern的配置与servlet中的配置一样:

* 三种配置:

    * 完全路径匹配:以/ 开始   /aaa /aaa/bbb

    * 目录匹配:     / 开始   /*  /aaa/*

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

 

servlet-name的配置】通过url-pattern拦截一个Servlet的资源.也可以通过servlet-name标签进行拦截.

 

dispatcher的配置】

* REQUEST:默认值.

* FORWARD:拦截转发

* ERROR:拦截跳转到错误页面.全局错误页面.  

* INCLUDE:拦截在一个页面中包含另一个页面.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值