filter过滤器_10.《JavaEE 学习笔记》filter过滤器

参考链接:

《Oracle Java EE编程指南》12-02:Filter相关的API​blog.csdn.net
1bd5428a4c00c6376fd3a9623ba5063f.png

1、概念

过滤器(filter)是一种代码重用的技术,它可以改变HTTP请求的内容,响应,及Header信息。过滤器通常不产生响应或像Servlet那样对请求作出响应,而是修改或调整到资源的请求,以及来自资源的响应。过滤器可以作用于所有Web资源,即动态或静态内容。

过滤器是指拦截请求,并对传给被请求资源的ServletRequest 或 ServletResponse 进行处理的一个对象。过滤器可以用于登录、加密和解密、会话检查等等。过滤器可以配置为拦截一个或多个资源。如果同一个资源或同一组资源中应用了多个过滤器,则调用顺序有显示显得比较重要,这时候就需要部署描述符(web.xml)来控制其先后顺序。

2、Filter 相关的API

2.1 Filter接口

方法:

  • init(FilterConfig filterConfig)
    该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数FilterConfig可以获得filter的初始化参数(初始化参数参见下面章节)。
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资
  • destroy()
    该方法在容器销毁过滤器对象前被调用。

2.2 FilterChain接口

该接口类型作为Filter接口中doFilter方法的参数使用。

方法:

  • doFilter(ServletRequest request,ServletResponse response)
    该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目标资源。

2.3 FilterConfig接口

该接口类型作为Filter接口中的init方法的参数使用。

方法

  • getInitParameter(String name)
    该方法用来获得过滤器的初始化参数值。在web.xml中,可以为每一个filter配置需要的初始化参数,与Servlet的类似。过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取。

代码案例:

解决中文乱码过滤器:

package 

3、 XML配置过滤器

配置项说明

<filter>中配置项:
    <filter-name>:过滤器的名称
    <filter-class>:该过滤器对应的配置类
    <init-param>:初始化参数
    <param-name>:参数名称
    <param-value>:参数值 
<filter-mapping>中配置项:
    <filter-name>:过滤器名称,和<filter>中的<filter-name>相同
    <url-pattern>:过滤器过滤的资源路径
    <dispatcher>:指定过滤器过滤的资源的调用方式,默认为REQUEST

dispatcher取值和意义

  • REQUEST:如果资源的调用方式是RequestDispatcher的forward()或include(),那么该资源路径即使匹配,过滤器也不会起作用
  • FORWARD:调用方式是RequestDispatcher的forward()起作用
  • INCLUDE:调用方式是RequestDispatcher的include()起作用
  • ERROR:如果该资源适配异常处理机制调用,则该过滤器起作用
<!-- 配置过滤器对象名称,过滤器类的路径,初始化参数 -->
  

获取过滤器初始化参数:

package 

4. 网页错误处理页面

我们的web通常404,500等错误,可能会暴露我们的源码,这是我们不希望让用户看见的,我们可以利用web.xml中配置错误页面来捕捉和处理这种错误页面,让用户看见和谐的页面。

d98de87a679483878cfe7bc8899bf036.png

46781db9a6d23911635e41b00a58ea24.png

处理方案:

在web.xml文件中配置错误页面,在<web-app></web-app>中间加上如下代码。还需要在location相关的页面的前面加上指令元素<%@page{iserrorPage="true"} %>

<error-page>
  

每日心语:

山有山的高度,水有水的深度,没必要攀比,每个人都有自己的长处;风有风的自由,云有云的温柔,没必要模仿,每个人都有自己的个性。你认为快乐的,就去寻找;你认为值得的,就去守候;你认为幸福的,就去珍惜。没有不被评说的事,没有不被猜测的人。做最真实的自己,依心而行,无憾今生。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值