[Java教程]过滤器与监听器知识总结

0

2017-08-25 19:00:13

过滤器

什么是过滤器?

过滤器是servlet2.3规范中定义的一种小型的、可插入的Web组件。用来拦截Servlet容器的请求和响应过程。以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。

过滤器通常是封装了一些功能的Web组件,这些功能很重要,但对于处理客户端请求或发送响应来说不是决定性的。

典型的应用包括记录请求和响应的数据、管理会话属性等。

如何编写过滤器?

1.编写一个java类,实现Filter接口;

--  过滤器API中有3个常用的接口,位于javax,Servlet包中:Filter,FilterChain,FilterConfig

编程中,过滤器类要实现Filter接口,该接口中包含三个必须实现的方法:

void init(FilterConfig  filterConfig);

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

void  destroy();

2.在doFilter方法中实现拦截处理逻辑;

--  public class CommentFilter implements Filter{

//创建实例后,调用init方法,该方法只执行一次

public void init(FilterConfig  filterConfig) throws ServletException{ //.....}

//容器调用doFilter方法处理请求

public void doFilter(ServletRequest  request,ServletResponse  response,FilterChain  chain)  throws IOException,ServletException{ //......     chian.doFilter(request,response);}

//容器删除过滤器实例之前调用该方法,该方法只执行一次

public void destroy(){...  ...}

}

3.将过滤器添加到Web程序中;

--  修改web.

filter1

web.xxxServlet

filter1

/xxx

4.把过滤器和Web应用一起打包部署。

--  与web应用程序一起部署过滤器时,只需要把过滤器类和其他web组件类包括在一起,把web.

过滤器的优先级

如果有多个过滤器都满足过滤的条件,则容器依据的先后顺序来调用各个过滤器。

.......

.......

......

......

过滤器的初始化参数

容器启动之后,会创建过滤器实例

接下来,容器会调用过滤器的init方法,而容器会事先创建FilterConfig对象。该对象可以访问在web.

这些在web.

通过这些初始化参数可以方便快捷的配置及修改一些辅助参数。

其中初始化参数的配置示例为:

filter1

web.xxxFilter

illegaIStr

xxx

读取初始化参数

使用FilterConfig对象可以读取在web.

String  config.getInitParamter("illegalStr")

过滤器的优点:

实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的正常执行;

可以将多个相同处理逻辑的模块集中写在过滤器里面,方便代码的维护。

监听器

什么是监听器?

Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理。

容器产生的两大类事件:

--生命周期相关的事件

容器创建或者销毁request,session,ServletContext时产生的事件

--绑定数据相关的事件

调用了request,session,ServletContext的setAttribute,removeAttribute方法时产生的事件

如何编写监听器?

1.编写一个java类,依据监听的事件类型选择实现相应的监听器接口。例如要监听Session对象的创建和销毁,要实现HttpSessionListener

--public class CouListener implements HttpSessionListener{ // 实现方法}

2.在监听器接口方法中,实现相应的监听处理逻辑

--public class CouListener implements HttpSessionListener{

public void sessionCreate(HttpSessionEvent arg0){

//......

HttpSession session = arg0.getSession();

ServletContext ctx = session.getServletContext();(获取session或上下文对象的方法)

}

}

3.在web.

--在web.

web.CouListener