什么是过滤器

过滤器就是 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防火墙后,docker启动容器报错

    # docker启动报错   # 解决办法:重建docker0网络恢复   #按照进程名杀死docker进程 [root@localhost mysqlconf]# pkill docker #清空防 ...

  2. 自己制作一个USB自动挖矿器

    先讲下设备效果: 对面坐着一位同事中午去吃饭没锁屏幕,这时候你想用他的电脑去挖矿, 挖矿,当然不可能跑到他的座位上,关掉360然后下载个挖矿软件什么的.... 这时候你只需要花十块钱制作如下设备,然后 ...

  3. js数据类型以及数组字符串常用方法

    JS判断数据类型 例子: var a = "iamstring."; var b = 222; var c= [1,2,3]; var d = new Date(); var e ...

  4. 配置Https 和 HSTS

    1. 视频 https://www.bilibili.com/video/av33344382/?p=2 using System; using Microsoft.AspNetCore.Builde ...

  5. Java_循环

    遍历数组: 一个栗子: public class Test01 { public static void main(String[] args) { int[] aa = {19,92,12,03,4 ...

  6. 通过cmd命令,杀掉占用端口号的进程

    错误问题:[Error running public: Unable to open debugger port (127.0.0.1:53110): java.net.BindException & ...

  7. 性能测试学习 第七课 --loadrunner中JavaVuser脚本的编写

    1.环境准备:      LoadRunner11----->对应JDK1.6版本(32位) LoadRunner12----->对应JDK1.7版本(32位) (一).JDK下载安装完成 ...

  8. python绘制图

    如何用python绘制图表 摘要: 使用python绘制简单的图表,包括折线图.柱状图.条形图.饼图.散点图.气泡图.箱线图.直方图等. 前言 本文介绍如果使用python汇总常用的图表,与Excel ...

  9. Raft协议实战之Redis Sentinel的选举Leader源码解析

    这可能是我看过的写的最详细的关于redis 选举的文章了, 原文链接 Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词.但是Paxos难 ...

  10. CentOS 7 安装配置 OpenVPN 客户端

    安装 epel yum 源: $ rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm $ ...