什么是过滤器

过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter 接口的 Java 类而已。

  • 特点:双向,拦截请求,拦截响应

  • 作用:

    过滤器可以对所有的请求或者响应做拦截操作

为什么在 Web 开发中需要用到过滤器?

  • 问题:为什么非得使用过滤器,我直接在 Servlet 中作判断不行吗?
  • 开发遵循的原则:

    1.DRY原则(Don't Reeat Yourself,不要重复你自己):重复,意味着维护的成本很高。

    2.责任分离原则:谁擅长什么功能就做什么功能,Servlet 擅长的是逻辑而不是处理请求

举一个实际的例子:(处理 POST 请求中文编码的问题)

  • Web 中过滤器的作用:

    1.可以在请求资源之前设置请求的编码

    2.可以进行登录校验

    3.可以进行请求参数的内容的过滤

    4.数据压缩 / 数据加密 / 数据格式的转换

    5.可以设置浏览器相关的数据

Filter 的开发和使用

对应于 Servlet 的开发步骤:

  1. 定义一个类,实现 Filter 接口
  2. doFilter() 方法中对请求响应进行过滤
  3. 在 web.xml 文件中进行 Filter 的配置(告诉服务器来管理当前的 Filter)
<!-- web.xml -->
<filter>
<filter-name>filter的名称</filter-name>
<filter-class>filter类的全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>指定对哪一个filter做的映射</filter-name>
<url-pattern>指定对哪些资源进行过滤</url-pattern>
</filter-mapping>
  • 注意:此时 <url-pattern> 表示对哪些资源做过滤/拦截。例如:
  • /hello.jsp

    当前 Filter 就仅仅只对 hello.jsp 资源做拦截.
  • /index

    当前 Filter 就仅仅只对 /index 资源做拦截.
  • /*

    当前 Filter 就对所有资源做拦截.访问任意的资源,都会先进入该过滤器器.
  • /system/*

    当前 Filter 就对以 /system/ 打头的资源做拦截.

    /system , /system/a, /system/a/b/c, /systema

Filter 映射细节

  1. 在启动服务器的时候,就创建了 Filter 对象并执行了初始化方法 init()。Filter 先于 Servlet 存在于服务端
  2. 在应用中允许存在多个 Filter ,到底哪一个 Filter 先执行哪一个后执行,这取决于在 web.xml 中定义的先后次序 (如果使用注解配置,则 Filter 的执行顺序由 Filter 的类名的字母的顺序来决定,如 AFilter 和 BFilter,则先执行 AFilter)
  3. 一个 Filter 可以配置多个 <url-pattern> 也可以对指定的 Servlet 做过滤(注解通过 servletNames 指定,配置由 <servlet-name> 指定)
  4. 默认情况下,Filter 只对新的请求做拦截,如果是请求转发,则不会过滤。
  • <dispatcher>配置项指定了 Filter 的过滤时间:
  • REQUEST只对请求做过滤,默认选项,如果有该配置项则必须显式写明
  • FORWARD:只对请求转发(forword)方式做过滤
  • ERROR:只对跳转到全局的错误页面做过滤
  • INCLUDE:只对请求包含(include)方式做过滤
  • 对应的注解属性为:dispatcherTypes

过滤器实例

戳这里


监听器

  • 作用:

    1.监听 web 应用的创建和销毁

    2.attribute发生的变化。

  • web 应用:即ServletContext对象(jsp的隐式对象application)

除了对web应用的监听外,还能监听sessionrequest的生命周期,以及他们的attribute发生的变化。

了解详情戳这里


欢迎转载,转载请注明出处!

简书ID:@我没有三颗心脏

github:wmyskxz

欢迎关注公众微信号:wmyskxz_javaweb

分享自己的Java Web学习之路以及各种Java学习资料

初学Java Web(8)——过滤器和监听器的更多相关文章

  1. 在Java Web程序中使用监听器可以通过以下两种方法

    之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...

  2. Java Web之过滤器(Filter)

    转: Java Web之过滤器(Filter) 2018年07月31日 16:58:40 喻志强 阅读数 13705更多 所属专栏: Java Web入门   版权声明:本文为博主原创文章, 转载请注 ...

  3. Java Web使用过滤器防止Xss攻击,解决Xss漏洞

    转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687   版权声明:本文为博主原创文章,转载请注明出处!有时候 ...

  4. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处 理有关,形成一个基础,在开发别的应用项目的时候则可以从 ...

  5. ssh整合web.xml过滤器和监听器的配置 .

    延迟加载过滤器 Hibernate 允许对关联对象.属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行.如果 Service 层返回一个启用了延迟 ...

  6. 初学Java web(转)

    转自 http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类——Web框架,该分类中包含多种编程语言的将近500个项目. Web框架是开发者 ...

  7. Java Web 中 过滤器与拦截器的区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  8. 初学 Java Web 开发,从 Servlet 开发

    1. 基本要求:Java 编程基础 有良好的 Java 语言编程基础,这是必须的,在讨论 Web 开发技术时提了一个 Java 编程基础的问题会被鄙视的. 2. 环境准备 (Eclipse + Tom ...

  9. 初学Java Web(9)——学生管理系统(简易版)总结

    项目开始时间:2018年4月8日14:37:47 项目完成时间:2018年4月9日10:03:30 技术准备 这个项目是自己用于巩固 J2EE 相关知识的练手项目,非常简单,但是相关的功能却非常实用, ...

随机推荐

  1. 小白的学习之路(hello wold!)

    Hello word ! 一直想写博客,但是都拖延了,正好两天有假期就开始弄这个事情了.开始觉得写博客也没有什么,一路学习以来都是看别人的博客进行学习,也收藏了不少博客,学到了不少东西,所以我觉的博客 ...

  2. 数据分析 大数据之路 六 matplotlib 绘图工具

      散点图 #导入必要的模块 import numpy as np import matplotlib.pyplot as plt #产生测试数据 x = np.arange(1,10) y = x ...

  3. 解决Idea无法提示代码、不检查语法的方法

    今天打开Idea做项目的时候,java代码图标出现异常(不是以前的C图标),所有java文件都只有两种颜色,百度查了一下,Idea有一个叫power save mode,在file -> Pow ...

  4. kodexplorer免费网盘安装教程

    KodExplorer是什么? KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统. 用户只需通过简单环境搭建,即可使用KodExplorer快速完成私有云/私有网盘 ...

  5. 关于height、offsetheight、clientheight、scrollheight、innerheight、outerheight的区别

    二.也是平时经常用到的offsetheight 它返回的高度是内容高+padding+边框,但是注意哦,木有加margin哦,当然一般也木有啥需要把margin加进去的,以上代码为例,结果显示上图h2 ...

  6. 浅谈微信小程序一二

    1.生命周期 1.onLoad():页面加载时触发,一个页面只加载一次. 2.onShow():页面显示切换的时候触发 3.onReady():页面初次渲染完成时触发.一个页面只会调用一次,代表页面已 ...

  7. mysql 水平分表

    新建10张表,user_0,user_1,...user_9,方法不可串用,采用hash或取余法,获取要操作的表名,取值用对应存值的方法 1.hash取余法 public function part_ ...

  8. linux df -i 100%处理

    发现空间是足够的,然后df -i 查看了下inodes,发现根目录下的inodes值使用率为100%了 解决方法:通过以下脚本进行检查,查看到底哪个目录下面的文件最多: find / -xdev -p ...

  9. 去掉input在type="number"时右边的上下箭头

    加了代码之后: input::-webkit-outer-spin-button, input::-webkit-inner-spin-button{ -webkit-appearance: none ...

  10. Winsock编程基继承基础(网络对时程序)

    #include <iostream> #include <stdio.h> #include "InitSock.h" using namespace s ...