当前位置: 首页 > 编程笔记 >

Servlet和Filter之间的区别与联系

赵宏达
2023-03-14
本文向大家介绍Servlet和Filter之间的区别与联系,包括了Servlet和Filter之间的区别与联系的使用技巧和注意事项,需要的朋友参考一下

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.

<!-- 配置一个过滤器 --> 
<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之间的区别与联系,希望对大家有所帮助!

 类似资料:
  • 本文向大家介绍Servlet和JSP之间的区别,包括了Servlet和JSP之间的区别的使用技巧和注意事项,需要的朋友参考一下 简而言之,可以将其定义为Servlet是在Web服务器上运行的Java程序,它们充当HTTP客户端发出的请求与HTTP服务器上的数据库或应用程序之间的中间层。而JSP只是一个文本文件,其中包含两种类型的文本:预定义的静态文本和在收到服务器响应后呈现的动态文本。 以下是Ar

  • 问题内容: 在我的Maven存储库中的groupId下,我有这两个单独的servlet工件。我很困惑应该使用哪个来构建一个简单的servlet应用程序?这两个工件之间有什么区别? 问题答案: javax.servlet-api版本3.0.1具有注释文件夹,其中包含不同的注释类,其中servlet- api版本2.5或更低版本(即版本2.4)不包含注释。 注释表示元数据。如果使用注释,则不需要部署描

  • 问题内容: 之间有什么区别 和 问题答案: 在Django的查询集文档都对这个很清楚的: 返回与给定查找参数匹配的对象,该参数应采用“字段查找”中所述的格式。 如果找到多个对象,则get()会引发MultipleObjectsReturned。MultipleObjectsReturned异常是模型类的属性。 如果找不到给定参数的对象,则get()会引发DidNotExist异常。此异常也是模型类

  • 本文向大家介绍互联网和内联网之间的区别,包括了互联网和内联网之间的区别的使用技巧和注意事项,需要的朋友参考一下 Internet和Intranet都与网络有关,如果着眼于两个词,则仅具有一个字母的区别。但是,除了这些注意事项之外,两者之间还有许多明显的区别,下面将进行讨论。 以下是Internet和Intranet之间的重要区别 序号 键 互联网 内联网 1 定义 互联网是互连的计算机网络的全球系

  • 问题内容: 我正在滚动遵循Servlet 2.5的J2EE代码,并且想知道2.5和3之间的主要区别是什么。最感谢指向Sun官方文档和个人经验的指针。 如果我暂时不考虑自己与3相关,那就这么说。谢谢! 问题答案: 更新 正如更新并更明确地说明的那样,这些是Servlet 2.5和3之间的主要区别(我并不想穷尽所有,我只是在提到最有趣的部分): 声明Servlet,过滤器和侦听器的注释(易于开发) 在