什么是过滤器

过滤器就是 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. linux服务器用ssh 公钥下载代码 创建公钥,添加

    ssh-keygen -t rsa -C "8....@qq.com"cd ~/.sshcat id_rsa.pub 粘贴到对应的 https://github.com/setti ...

  2. 1062 Text Reverse

    http://acm.hdu.edu.cn/showproblem.php?pid=1062 思路: 最主要的是通过getline函数存取字符串. 如何读取单个单词,并且反向输出? 用\n作为单个单词 ...

  3. linux视频录制,推流处理

    1.linux视频合成(视频后缀要一致) ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -lavfi hstack=inputs=3 4.mp4 (input=3表示希望合并的视 ...

  4. vue-cli利用router创建单页面

    一.创建脚手架 第一步 打开命令输入vue init webpack-simple vue-name 下载webpack-simple  (vue-name是你要创建的项目名称) 第二步 输入cd v ...

  5. 获取subgrid中的数据并修改,含添加刷新列表的事件

    var isAddRefresh = false; function setLawsuitQueryResultText() { var queryResultIndex = 7; var gridC ...

  6. php GD库快速消耗CPU资源漏洞 CVE-2018-5711测试

    漏洞说明: 用一张GIF图片就可导致服务器发生崩溃直至宕机,在现实中非常容易利用. 影响版本: PHP 5 < 5.6.33 PHP 7.0 < 7.0.27 PHP 7.1 < 7 ...

  7. Python爬虫第二天

    Python爬虫第二天   超时设置         有时候访问网页时长时间未响应,系统就会判断网页超时,无法打开网页.如果需要自己设置超时时间则:             通过urlopen()打开 ...

  8. OJ001

    #include<stdio.h> int main(){ int a,b; while (scanf("%d%d",&a,&b)!=EOF){ pri ...

  9. 实现CSS隐藏滚动条并可以滚动内容

    隐藏滚动条的同时还需要支持滚动,我们经常在前端开发中遇到这种情况,最容易想到的是加一个iscroll插件,但其实现在CSS也可以实现这个功能,我已经在很多地方使用了,下面一起看看这三种方法. 方法1: ...

  10. 吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection)

    对于异常检测算法,使用特征是至关重要的,下面谈谈如何选择特征: 异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数: