博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java---servlet与filter的联系与区别
阅读量:6069 次
发布时间:2019-06-20

本文共 2013 字,大约阅读时间需要 6 分钟。

filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。

最近使用插装的时候,改用cookie对计算机进行识别,加入了过滤,仔细研究了一下servlet和filter,区别主要是:

过滤器的生命周期一般都要经过下面三个阶段:

servlet的特点是:

初始化

当容器第一次加载该过滤器时,init() 方法将被调用。该类在这个方法中包含了一个指向 Filter Config 对象的引用。我们的过滤器实际上并不需要这样做,因为其中没有使用初始化信息,这里只是出于演示的目的。

过滤

过滤器的大多数时间都消耗在这里。doFilter方法被容器调用, 同时传入分别指向这个请求/响应链中的 Servlet Request、Servlet Response 和 Filter Chain 对象的引用。然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 Filter Chain 对象引用上的 doFilter方法),之后在处理控制权返回该过滤器时处理响应。

析构

容器紧跟在垃圾收集之前调用 destroy()方法,以便能够执行任何必需的清理代码。

关于chain.doFilter(request,response)他的作用是将请求转发给过滤器链上下一个对象。这里的下一个指的是下一个filter,如果没有filter那就是你请求的资源。 一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起 

request -> filter1 -> filter2 ->filter3 -> .... -> request resource.

filter是链式操作,那么在处理单个filter时必须最后跳转到servlet对请求进行响应。

如果走chain的话,通过chain.doFilter(request,response)这个方法会立即跳转到被拦截的servlet并且执行完还要再返回filter.chain相当于一扇门,从这扇门出去再从这扇门回来.调用filter的方法就是在web.xml中配置,需要配置一个与你需要拦截的servlet相同的url-pattern.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!-- 配置一个过滤器 -->
<filter>
<filter-name>suibianxie</filter-name>
<filter-
class
>com.etoak.filter.MyEncoding</filter-
class
>
<!-- 配置一个私有参数 --> <init-param> <param-name>mycode</param-name> <param-value>gbk</param-value> </init-param> </filter>
<!-- 拦截的先后顺序和mapping的顺序有关 --> <filter-mapping> <filter-name>suibianxie</filter-name>
<!-- 注意这里和要拦截的servlet的url-pattern必须一致,等于是过滤器 抢在servlet之前拦截住了 -->
<url-pattern>/servlet/Test</url-pattern> </filter-mapping>
<!-- 配置第二个过滤器 -->
<filter>
<filter-name>suibianxie2</filter-name>
<filter-
class
>com.etoak.filter.Naming</filter-
class
>
</filter>
<filter-mapping>
<filter-name>suibianxie2</filter-name>
<url-pattern>/servlet/Test</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-
class
>com.etoak.servlet.Test</servlet-
class
>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/servlet/Test</url-pattern>
</servlet-mapping>

以上所述是小编给大家介绍的Servlet和Filter之间的区别与联系,希望对大家有所帮助!

转载地址:http://fmygx.baihongyu.com/

你可能感兴趣的文章
总结出来的一些ASP.NET程序性能优化的注意事项[不断补充]
查看>>
对象合成复用之策略模式
查看>>
步步为营 .NET 设计模式学习笔记 八、State(状态模式)
查看>>
MEF(Managed Extensibility Framework)有选择性地使用扩展组件
查看>>
在Brackets中使用Emmet
查看>>
VC 最爱问的问题:你这个创业项目,如果腾讯跟进了,而且几乎是产品上完全复制,你会怎么办?...
查看>>
SGU 303 Great Berland Wall(计算几何判环+最小割)
查看>>
3D游戏引擎剖析
查看>>
21. D3D-Sprite
查看>>
转载 关于使用typeid时要注意的问题
查看>>
JAVA的String 类
查看>>
cocos2d 的touch事件要点
查看>>
程序入口
查看>>
Spring MVC 3.0 RestTemplate
查看>>
ADO.NET访问数据集的表、行和列
查看>>
Flink - Working with State
查看>>
svn add xxx.txt 提示A (bin) xxx.txt
查看>>
数据库设计
查看>>
C语言 · 分数统计
查看>>
推断两条单链表是否相交
查看>>