什么是过滤器?

其实过滤器(Filter)跟Servlet很相似,都是java的一个组件。即请求发送到servlet之前,可以将其拦截和处理请求,也可以在serlvet结束工作之后,在响应发回之前处理响应,做一些事情。因此,可以理解为过滤器filter就是是拦截请求(request)和响应(response),并对传给请求资源的ServletRequest 或 ServletResponse 进行处理的一个对象。可以参见下图:

请求过滤器的作用:完成安全检查

重新格式化请求首部或者体

建立请求审计和日志

响应过滤器的作用:压缩相应流

追加或者修改流

创建一个完全不同的响应

Servlet API中提供了一个Filter接口,开发应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。很多java教程里面都有介绍,Filter的实现类实现了一个J2EE的过滤器,过滤器的api允许访问ServletCOntext,同样可以链接到另一个Filter。

Filter类似于Servlet一个样,有一个生命周期。里面有:init(), destroy(),还有个核心方法:doFilter()。init(FilterConfig):这是Filter的初始化方法,Servlet容器创建Filter实例后将调用这个方法。在这个方法中可以读取web.xml文件中Filter的初始化参数

doFilter(ServletRequest,ServletResponse,FilterChain): 这个方法完成实际的过滤操作,当客户请求访问于Filter关联的URL时,Servlet容器将先调用Filter的doFilter方法。FilterChain参数用于访问后续Filters

destroy():  Servlet容器在销毁Filter实例前调用该方法,这个方法中可以释放Filter占用的资源

大家主要看看这个参数:ServletRequest /ServletResponse 。这个方法不取HTTP请求和相应对象做参数,而只是常规的ServletRequest /ServletResponse 对象。这里是对通用性的设计,过滤器的设计的要通用,如果过滤器用于一个非web应用,所以实现非Http接口。但不用担心的是,ServletResponse 是HttpServletResponse的超类。

拦截器的使用场景:处理乱码问题;

统计request和response的时间,有助于我们分析代码的效率;

过滤非法请求路径

java中过滤器的接口_java中的过滤器相关推荐

  1. java中如何定义接口_java中如何定义一个接口

    使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下:[修饰符] interface 接口名 [e ...

  2. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  3. java implements 多个接口_JAVA中implements实现多接口

    JAVA中implements实现多接口 这里有一个游戏,人猿泰山. 主角是一个单独的类,这里我们主要用怪物说明接口的用法: 怪物有很多种, 按地域分:有的在天上飞,有的在地上跑,有的在水里游 按攻击 ...

  4. java中匿名内部类实现接口_java中的匿名内部类是成员内部类吗?我就很不明白为什么造一个接口的时候匿名内部类是怎么去实现接口的...

    展开全部 内部类分为四种: 静态e68a8462616964757a686964616f31333337623463内部类(static inner classes) 成员内部类(member inn ...

  5. java的标记接口_Java中的标记接口?

    我被教授,Java中的Marker接口是一个空接口,用于向编译器或JVM发送信号,实现此接口的类的对象必须以特殊方式处理,如序列化,克隆等. 但最近我了解到,它实际上与编译器或JVM无关.例如,在Se ...

  6. JAVA中的remote接口_JAVA基础:TravelAgentRemote(远程接口)

    创建TravelAgent EJB的第一步是定义它的远程接口.该接口规定了允许客户端调用的EJB业务方法.客户端与TravelAgent的createCaben()和findCabin()方法进行交互 ...

  7. java中按钮的接口_Java接口基础

    接口(interface) 1.接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法,而且接口体中所有的常量访问权限一定是public,而且是static常量(允许 ...

  8. java如何调c 的接口_JAVA中调用C语言接口

    写一个Java类,在这个类中包含了需要调用的本地方法的描述. //WinMsgBox.java package edu.netcom.jni; public class WinMsgBox  { st ...

  9. java实现文件名过滤器接口_Java使用文件过滤器FileFilter、FilenameFilter搜索文件

    搜索文件优化,使用文件过滤器来搜索文件 我们可以使用过滤器来实现在某一目录下指定文件格式的搜索 在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器 一.FileFilter ...

最新文章

  1. Java两种简单的获取页面源码的方法
  2. 018-继承-OC笔记
  3. HDU 2647 拓扑排序
  4. 这个女人,败得很漂亮!看后有感!
  5. 跟我师兄聊天引发的思考
  6. java response.write_@ResponseBody与response.getWriter .write()区别
  7. python实现的json数据以HTTP GET,POST,PUT,DELETE方式页面请求
  8. FastRoute - 快速请求路由
  9. 从Oracle到PostgreSQL:最全控制文件
  10. Python MySQL入门连接
  11. 视频教程-Go语言区块链开发入门视频教程-区块链
  12. Dummy variable (变量dummy化)
  13. 性能测试场景设计深度解析
  14. mac的 tr命令_tr命令 - Holy_Shit - 博客园
  15. 网址在QQ微信被拦截怎么办?怎么样才能让被微信屏蔽的网址正常访问
  16. 蓝桥杯2019年第十届国赛真题-大胖子走迷宫
  17. 上众筹,智能手环走“全民路线”破局?
  18. 2023年全国最新二级建造师精选真题及答案44
  19. DIMM DDR 区别和联系
  20. 分布式id生成器:彻底解决雪花算法时间回拨问题

热门文章

  1. 优雅的操作scrapy爬虫的开始和结束
  2. quatzy获取参数强转异常,devtools类加载机制问题
  3. 一码多付(扫码支付)原理
  4. 五年增长50倍,云栖小镇是怎么炼成的?
  5. python多维数组拟合_python归一化多维数组的方法
  6. 软文推广在哪些平台排名更好?
  7. 对于做生意的一些看法和想法
  8. Query DSL - Terms Query
  9. 上海长途汽车站客运站点及时刻表
  10. Java小白入门200例86之Java方法重载