Filter过滤器

web.xml中元素执行的顺序listener->filter->struts拦截器->servlet。

1.过滤器的概念

Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

优点:过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。而在实际使用时,就要特别注意过滤链的执行顺序问题

2.过滤器的作用描述

在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。 
  根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。 
  在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。 
根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。

3.Filter接口

1.如何驱动

    在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中

2.方法介绍

    init()  Init 方法在 Filter 生命周期中仅执行一次,web 容器在调用 init 方法时
    destory()  在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
    doFilter() Filter 链的执行 

4.FilterChain接口

1.如何实例化

    代表当前 Filter 链的对象。由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中

2.作用

    调用过滤器链中的下一个过滤器

Filter开发分为二个步骤:

编写java类实现Filter接口,并实现其doFilter方法。
在 web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源。
web.xml <!-- 编码过滤器 -->  
 <filter>
<filter-name>CharserFilter</filter-name>
<filter-class>com.yc.web.filters.CharserFilter</filter-class>

</filter>
<!--权限过滤器-->
<filter>
<filter-name>AuthorityFilter</filter-name>
<filter-class>com.yc.web.filters.AuthorityFilter</filter-class>

</filter>

<filter-mapping>
<filter-name>AuthorityFilter</filter-name>
<url-pattern>/backcust/*</url-pattern>

</filter-mapping>

<filter-mapping>
<filter-name>AuthorityFilter</filter-name>
<url-pattern>/backadmin/*</url-pattern>

</filter-mapping>

<filter-mapping>
<filter-name>CharserFilter</filter-name>
<url-pattern>/*</url-pattern>

</filter-mapping>
public class CharserFilter implements Filter {

    private String charset="utf-8";

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        //强将arg0 arg1 转为http协议
                HttpServletRequest request=(HttpServletRequest)arg0;
                HttpServletResponse response=(HttpServletResponse)arg1;


                request.setCharacterEncoding(charset);
                response.setCharacterEncoding(charset);

                //调用过滤器链
                arg2.doFilter(request, response);
    }

    public void init(FilterConfig arg0) throws ServletException {
        //读取filter的初始化参数 取出配置的charset
                if(arg0.getInitParameter("charset")!=null){
                    this.charset=arg0.getInitParameter("charset");
                }

    }

    public void destroy() {


    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 研究

OKHttp源码解析(一)--初阶

这段时间老李的新公司要更换网络层,知道现在主流网络层的模式是RxJava+Retrofit+OKHttp,所以老李开始研究这三个项目的源代码,在更换网络层后,开...

2364
来自专栏Java 技术分享

Filter、Listener 学习总结

4927
来自专栏西安-晁州

webservice随记

WebService:跨平台、系统、跨语言间相互调用 CXF: Axis(Apache)-> Axis2(Apache) XFire -> CXF(Celt...

2480
来自专栏jeremy的技术点滴

获取后台任务进度的另类办法

5866
来自专栏代码拾遗

OkHttp 使用示例

可以用来下载文件,打印header,打印body。string()方法对于小文档的响应来说是个既方便又高效的方法。但是如果一个文档太大(大于1M),就不要使用s...

2991
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第八天 Servlet学习【悟空教程】

在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功能.

1451
来自专栏Java3y

Servlet第三篇【request和response简介、response的常见应用】

response、request对象 Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象、和代表响应的respon...

41611
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十五天 Ajax学习【悟空教程】

在实际开发中,完成注册功能前,如果用户填写用户信息,准备填写其他信息时,将提示当前用户的用户名是否可用。效果图如下:

1343
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb11-jsp.cookie.session(2)

http协议规定 Http协议对Cookie做了一些规定,如下所示: a. 一个Cookie的大小,最大为4KB; b. 一个服务器最多向一个浏览器保存20个C...

4299
来自专栏Java后端生活

JavaWeb(五)Servlet-2

2136

扫码关注云+社区

领取腾讯云代金券