一、定义

应用场景
  自动登录
  统一设置编码格式
  访问权限控制
  敏感字符过滤等

二、创建Filter

1、配置web.xml

    <filter><filter-name>first</filter-name><filter-class>net.pp.Filter.FirstFilter</filter-class><init-param><param-name>param</param-name><param-value>value</param-value></init-param></filter><filter-mapping><filter-name>first</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher></filter-mapping>

2、实现Filter接口

FirstFilter.java

package net.pp.Filter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;public class FirstFilter implements Filter{@Overridepublic void init(FilterConfig filterConfig) throws ServletException {String filterName = filterConfig.getFilterName();String initParameter = filterConfig.getInitParameter("param");ServletContext servletContext = filterConfig.getServletContext();System.out.println(filterName+"--"+initParameter);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("FirstFilter已经执行拦截!");//解除拦截filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}
}

3、在Servlet中测试

TestFilter

package net.pp.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(name = "TestServlet" ,urlPatterns = "/testFilter")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("test/html;charset=utf-8");response.getWriter().write("testFilter已经被访问了!");}
}

结果:

三、配置Filter

1)url-Pattern配置
        配置要拦截的资源

  1. 以指定资源匹配。例如"/index.jsp"
  2. 以目录匹配。例如"/servlet/*"
  3. 以后缀名匹配,例如"*.jsp"
  4. 通配符,拦截所有web资源。"/*"
    <filter-mapping><filter-name>first</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher></filter-mapping>

2)dispatcherTypes **
配置拦截的类型,可配置多个。

    FORWARD,//转发的INCLUDE,//包含在页面的REQUEST,//请求的ASYNC,//异步的ERROR;//出错的

  3)注解方式配置

package filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;@WebFilter(filterName = "CharsetFilter",urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/initParams = {@WebInitParam(name = "charset", value = "utf-8")/*这里可以放一些初始化的参数*/})
public class CharsetFilter implements Filter {private String filterName;private String charset;public void destroy() {/*销毁时调用*/System.out.println(filterName + "销毁");}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {/*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/System.out.println(filterName + "doFilter()");req.setCharacterEncoding(charset);resp.setCharacterEncoding(charset);chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {/*初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/filterName = config.getFilterName();charset = config.getInitParameter("charset");System.out.println("过滤器名称:" + filterName);System.out.println("字符集编码:" + charset);}}

多个Filter的执行顺序

在我们的请求到达Servle之间是可以经过多个Filter的,一般来说,建议Filter之间不要有关联,各自处理各自的逻辑即可。
如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下

在web.xml中,filter执行顺序跟<filter-mapping>的顺序有关,先声明的先执行
使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行
如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter

javaWeb过滤器——Filter相关推荐

  1. JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)

            注意:这篇文章很长,学习完后将会解决你对于过滤器(Filter)的所有疑惑,下面将通过理论和代码的结合来进行讲解演示.....  目录 基本介绍 过滤器原理 过滤器(Filter)接口 ...

  2. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  3. JavaWeb过滤器(Filter)

    开发工具与关键技术:javaWeb,过滤器(Filter) 撰写时间:2019-05-26 总结下述所有表达 第一点:过滤器是什么 第二点:客户端到服务端的流程 第三点:过滤器如何编写 第四点:Fil ...

  4. Javaweb核心之servlet规范过滤器-----Filter

    2 Servlet规范中的过滤器-Filter 2.1 过滤器入门 2.1.1 过滤器概念及作用 过滤器--Filter,它是JavaWeb三大组件之一.另外两个是Servlet和Listener. ...

  5. (JavaWeb)Filter过滤器

    Filter过滤器 Filter:过滤器,用来过滤网站的数据. 自动登录 统一设置编码格式 访问权限控制 敏感字符过滤等 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或serv ...

  6. ⑧javaWeb之在例子中学习(过滤器Filter)

    前言 本系列 Servlet & JSP 学习系列[传送门]逐渐到了中期了,希望大家喜欢我写的,总结的点点滴滴- 今天我们来讲讲过滤器 你们的支持是我写博客的动力哦. 最近买了两本书,觉得大二 ...

  7. java脏字过滤_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...

    案例1. 利用Servlet的过滤器Filter进行完成脏话过滤 package cn.javabs.filter; import java.io.IOException; import javax. ...

  8. java脏话模糊对比_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...

    案例1. 利用Servlet的过滤器Filter进行完成脏话过滤 package cn.javabs.filter; import java.io.IOException; import javax. ...

  9. javaweb项目Filter过滤器详解

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

  10. JavaWEB过滤器和监听器技术

    过滤器介绍 什么是过滤器 生活中的例子: 滤水器,口罩,杯子上滤网,渔网 生活中的过滤器:留下我们想要的,排除,我们不想要的. 高考: 只有分数够高的同学才能进入理想的大学.有一部分同学被拦截在大学之 ...

最新文章

  1. 约瑟夫环形链表问题、丢手帕问题、剑指offer圆圈中最后一个数问题
  2. Unity5x编辑器的视图二
  3. [YTU]_2633( P3 数钱是件愉快的事)
  4. vSphere开发指南1——vSphere Automation API
  5. C语言循环遍历文件夹查找文件内容(搜素/proc文件夹下的内容获取进程pid)
  6. BZOJ3743 : [Coci2014]Kamp
  7. 作者:鲍玉斌(1968-),男,博士,东北大学计算机科学系教授
  8. php 缩略图增加水印,PHP生成缩略图加图片水印代码
  9. django-如何让首页不要报错
  10. 百度智能云“云+AI”新战略年终答卷,PaddlePaddle累计开发者数量265万人
  11. linux 加密文件,如何运用OpenSSL 对文件进行加密和解密
  12. 如何优雅的使用iBatis
  13. [置顶] ios 360度旋转效果demo
  14. eclipse安装ADT插件
  15. 大量思科设备存在IPv6死亡之Ping漏洞
  16. QQ空间内容批量删除脚本
  17. 多台linux服务器ssh相互无密码访问
  18. Win32病毒入门 -- ring3篇
  19. 网络广播mms直播地址
  20. 【ArangoDB 介绍】

热门文章

  1. SQL Server 和 HSQLDB 中使用 merge into 完成 saveOrUpdate
  2. 别被数据分析师骗了!用数据说谎的三种办法
  3. Go -- go语言指针
  4. 一个性能较好的JVM参数配置(转)
  5. CentOS 下安装 Nginx
  6. How to install and configure vsftpd
  7. 微软MED-V虚拟化实战教程之二映像准备和测试
  8. IC卡插入与触点激活时序
  9. setInterval()与clearInterval()的用法
  10. 各种应用程序错误,xx内存地址不能read等报错可能的原因与解决方案