import javax.servlet.Filter;

前言

过滤器是一个程序,依赖与servlet容器,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:

  • 以常规的方式调用资源(即调用servlet或JSP页面)。
  • 利用修改过的请求信息调用资源。
  • 调用资源,但在发送响应到客户机前对其进行修改。
  • 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。

1.作用

一般用于登陆判断,统一编码

在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。

2.过滤器配置(web.xml)

web.xml里面配置自定义的过滤器

<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>com.filter.CharsetFilter </filter-class>
</filter> <filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/xx/xx/*</url-pattern>
</filter-mapping>

3.常用配置项

1.urlPatterns配置要拦截的资源

  • 以指定资源匹配。例如"/index.jsp"
  • 以目录匹配。例如"/servlet/*"
  • 以后缀名匹配,例如"*.jsp"
  • 通配符,拦截所有web资源。"/*"

2.initParams配置初始化参数

initParams = {@WebInitParam(name = "key",value = "value")}

dispatcherTypes配置拦截的类型,可配置多个。默认为DispatcherType.REQUEST

dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}

3.DispatcherType是个枚举类型

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

4.自定义过滤器

@WebFilter(filterName = "CharsetFilter",
urlPatterns = "/*",
initParams = {
@WebInitParam(name = "charset", value = "utf-8")
})
public class CharsetFilter implements Filter {
private String filterName;
private String charset; public void init(FilterConfig config) throws ServletException {
/*初始化方法 接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
filterName = config.getFilterName();
charset = config.getInitParameter("charset");
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
/*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
HttpServletRequest request= (HttpServletRequest) req;
HttpServletResponse Response= (HttpServletResponse) resp;
HttpSession session=request.getSession();
request.setCharacterEncoding(charset);
Response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, Response);
} public void destroy() {
/*销毁时调用*/
}
}

5.FilterConfig接口定义的各个方法

  • getFilterName()方法,返回 web.xml 里 元素的设置名称。
  • getServletContext()方法用于返回 FilterConfig 对象中所包装的 ServletContext 对象的引用
  • getInitParameter(String name)方法,用于返回在 web.xml 文件中为 Filter 所设置的某个名称的初始化参数值,如果指定名称的初始化参数不存在,则返回 null
  • getInitParameterNames()方法用于返回一个 Enumeration 集合对象,该集合对象包含在 web.xml 文件中为当前 Filter 设置的所有初始化参数的名称
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.filter.MyFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

注:过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法.

当Filter被移除或服务器正常关闭时,会执行destroy方法

多个filter执行顺序跟<filter-mapping>的顺序一致

过滤器 一 Filter的更多相关文章

  1. 使用 PHP 过滤器(Filter)进行严格表单验证

    PHP 过滤器(Filter)用于验证和过滤来自非安全来源的数据,比如用户的输入,使用过滤器扩展可以使数据过滤更轻松快捷.要求的 PHP 版本是 PHP 5 >= 5.2.0,PHP 7 和 F ...

  2. 走进AngularJs(七) 过滤器(filter)

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们 ...

  3. Struts2 源码分析——过滤器(Filter)

    章节简言 上一章笔者试着建一个Hello world的例子.是一个空白的struts2例子.明白了运行struts2至少需要用到哪一些Jar包.而这一章笔者将根据前面章节(Struts2 源码分析—— ...

  4. 走进AngularJs(七) 过滤器(filter) - 吕大豹

    时间 2013-12-15 16:22:00  博客园-原创精华区 原文  http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器 ...

  5. 过滤器(filter)实现用户登录拦截

    过滤器(filter)实现用户登录拦截 >>>>>>>>>>>>>>>>>>>> ...

  6. django 自定义过滤器(filter)处理较为复杂的变量的实例

    简述:django 在views中有数据需要通过字典(dict)的方式传递给template,该字典中又包含了字典,而且字典中的键值还是一个对象,在template中处理传递过来的数据的时候,字典不能 ...

  7. Servlet之过滤器(Filter)和监听器(Listener)

    过滤器 过滤器是一个java组件,可以拦截发送至某个servelet,jsp页面或静态页面的请求,可以在响应发送到客户之前进行拦截 工作原理: 过滤器类必须实现 Filter 接口,包含的方法如下: ...

  8. 十五、过滤器(Filter)

    过滤器(Filter) 过滤器概述 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执 ...

  9. 过滤器(Filter)与拦截器(Interceptor )区别

    目录 过滤器(Filter) 拦截器(Interceptor) 拦截器(Interceptor)和过滤器(Filter)的区别 拦截器(Interceptor)和过滤器(Filter)的执行顺序 拦截 ...

  10. Servlet之过滤器(Filter)

    一.概述 Servlet 过滤器是小型的 Web 组件,它们拦截请求和响应,以便查看.提取或以某种方式操作正在客户机和服务器之间交换的数据.这些组件通过一个配置文件来声明,并动态地处理,当在web.x ...

随机推荐

  1. IT书单-持续更新

    重构:改善既有代码的设计代码整洁之道深入理解Java虚拟机Java并发编程的艺术<修改代码的艺术><程序员的职业素养>代码大全程序员修炼之道深入理解java虚拟机Java并发编 ...

  2. 让所有Excel数据格全部乘 某个数

    1  首先设置单元格格式要是数字 2  然后在随便一个单元格写入你要乘的数字 3  粘贴的时候设置选择性粘贴,然后设置乘就OK

  3. cd 切换

    切换

  4. css负边距之详解(子绝父相)

    来源 | http://segmentfault.com 原文 |  The Definitive Guide to Using Negative Margins   自从1998年CSS2作为推荐以 ...

  5. python_django_富文本

    下载富文本: pip install django-tinymce 一.配置 在settings.py文件INSTALLED_APPS中添加:'tinymce': 二.应用 1.在admin中使用 a ...

  6. nodejs模块——目录操作

    1.创建目录 使用fs.mkdir(path,[mode],callback)创建目录,path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数. demo:m ...

  7. 7、执行 suite 后,result.html 测试报告中,测试结果全部显示为通过原因分析

    测试用例中,断言 异常后,必须 raise 抛出异常, 若无raise ,则测试报告中测试结果全部显示为通过. 抛出后,显示实际测试结果,通过/未通过 __author__ = 'Administra ...

  8. react-native run-android出现红屏错误

    react-native run-android出现 unable to load script from assets 'index.android.bundle'.Make sure your b ...

  9. Java——类之间的关系

    3.7 类之间的关系 3.7.1 泛化关系 类和类之间的继承关系及接口与接口之间的继承关系. 3.7.2 实现关系 类对接口的实现. 3.7.3 关联关系 类与类之间的连接,一个类可以知道另一个类的属 ...

  10. CSScomb.js --- 自定义 CSS 编写风格配置文件

    一.排序分类 1. content overflow position z-index display float ... 表示定位/布局的属性(content比较特殊,作为伪元素不可少的,经常放置于 ...