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 条评论
登录 后参与评论

相关文章

  • 必须掌握的八种排序(3-4)--简单选择排序,堆排序

    3、简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换; 然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第...

    汤高
  • 30分钟--Spark快速入门指南

    Spark快速入门指南 – Spark安装与基础使用  2016-01-15 (updated: 2016-03-07) 6309 29 Apache Spa...

    汤高
  • 数据挖掘算法之贝叶斯网络

    贝叶斯网络 序 上上周末写完上篇朴素贝叶斯分类后,连着上了七天班,而且有四天都是晚上九点下班,一直没有多少时间学习贝叶斯网络,所以更新慢了点,利用清明节两天假期...

    汤高
  • 一行代码使网站变灰

    根据国务院公告,定于2020年4月4日10时,为抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞举行哀悼活动。

    前端黑板报
  • Java ---Filter过滤器

         Filter可以视作是servlet的加强版,主要用作对用户的请求进行预处理,或者对返回给客户端的结果进行再次加工,是一个典型的链式处理模式。本篇简单...

    Single
  • java后台开发- NOTE

    2015-1-6: IDEA servlet-api.jar    idea从14升级到15后,发现 import javax.servlet.AsyncCon...

    梦里茶
  • python3和python2中的filter区别

    python3中的filter与python2中的是不一样的 其中,在python2中

    周小董
  • 细说shiro之自定义filter

    我们知道,shiro框架在Java Web应用中使用时,本质上是通过filter方式集成的。 也就是说,它是遵循过滤器链规则的:filter的执行顺序与在we...

    2Simple
  • springmvc使用DELETE|PUT请求

    乐心湖
  • 碎片化 | 第四阶段-28-Struts2框架概述以及原理图解-视频

    如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/o05656uacql.html Struts2 概述 Strut...

    码神联盟

扫码关注云+社区

领取腾讯云代金券