第3.57课 上课 Servlet深入介绍, Filter过滤器介绍

3_57

Servlet深入介绍

 Filter过滤器介绍

Filter过滤器可以对Servlet、JSP和HTML文件过滤。

 

过滤器在实际开发中用得较多,是属于较重点的内容。

 

Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改。

 

Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用。

 

Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容。

 

在Servlet被调用之后检查Response对象,修改Response Header和Response内容。

 

Servlet过滤器负责过滤的Web组件可以是Servlet、JSP或HTML文件。

 

 

过滤器的处理过程是一个链式的过程(FilterChain),即多个过滤器组成一个链,依次处理,最后交给过滤器之后的资源。

 

其中链式过滤过程中也可以直接给出响应,即返回,而不是向后传递。

 

 

Filter与Servlet的区别在于:

Filter不能直接向用户生成响应。

完整的流程是:Filter对用户请求进行预处理,接着将请求交给 Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

  为什么要学习Filter

   用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求。

   日志Filter:详细记录某些特殊的用户请求。

   负责解码的Filter:包括对非标准编码的请求解码。

  实现

   实现javax.servlet.Filter接口

   web.xml添加一个配置,增加filter和filter-mapping元素

   FilterChain作用:执行完一个过滤器以后,如果要继续执行,则需要调用过滤器链

1.服务器会把所有匹配URL的过滤器全部拿出来执行,其中执行的顺序按照web.xml文件中配置上下顺序执行。

2.如果不执行FilterChain.doFilter方法的话,相当于把过滤器链给打断。

3.如果过滤器链被打断,那么最后的实际资源将不会再被执行,相当于每个过滤器链最后一个节点,始终是指实际的资源。

 

 

 

 

///=====================

CharsetEncodingFilter.doFilter(){

//.....预处理

 

chain.doFilter();

 

//~~~~~后处理

}

 

chain.doFilter(){

权限过滤器.doFilter();

}

 

权限过滤器.doFilter(){

//.....预处理

if(无权访问){

//重定向到登录页面/或者提示页面

} else {

chain.doFilter();

}

 

//~~~~~后处理

}

 

chain.doFilter(){

//因为后面没有过滤器了,所以执行实际的资源

XXXXServlet.service();

}

   多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。

  作用

   预处理 : 在FilterChain.doFilter之前执行的代码,叫预处理,针对请求对象

   后处理 : 在FilterChain.doFilter之后执行的代码,叫后处理,针对响应对象

  初始化参数

   设置参数:在web.xml文件的<filter...>中添加<init-param>元素

   获取参数:调用filterConfig.getInitParameter方法

  生命周期

   init : 加载过滤器的时候执行,但是过滤器没有加载级别,应用启动的时候,就会加载

   doFilter:拦截到请求的时候执行

   destory:销毁过滤器的时候执行,应用停止的时候销毁。

  注意:

   设置响应头,必须要在过滤器链中最前面的过滤器中进行设置

  E购通电子商务平台:统一编码功能实现

posted on 2018-01-31 23:10  東風★破  阅读(145)  评论(0)    收藏  举报

导航