java---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.
|
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之间的区别与联系,希望对大家有所帮助!
java---servlet与filter的联系与区别的更多相关文章
- Java Servlet (1) —— Filter过滤请求与响应
Java Servlet (1) -- Filter过滤请求与响应 版本: Java EE 6 参考来源: Oracle:The Java EE 6 Tutorial: Filtering Reque ...
- servlet、filter、listener、interceptor之间的区别和联系
一.概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. 2.filter: ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- Java Servlet Filter(转)
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- java web.xml listener servlet 和filter加载顺序
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...
- Java的Servlet、Filter、Interceptor、Listener
写在前面: 使用Spring-Boot时,嵌入式Servlet容器可以通过扫描注解(@ServletComponentScan)的方式注册Servlet.Filter和Servlet规范的所有监听器( ...
- Java Servlet Filter
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener
[Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...
- springboot扫描自定义的servlet和filter代码详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...
- Java Servlet和Java Filter简介
一:简介servlet 1.什么是Servlet? Servlet可以通过多种方式进行描述,具体取决于上下文: (1)Servlet是一种用于创建web应用程序的技术 (2)Servlet是一个API ...
随机推荐
- 算法笔记_034:大整数乘法(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import ...
- 安卓手机GPU OpenCL总结(转)
前段时间,把市面上手机GPU OpenCL支持情况做了一个总结.总结如下: 目前,手机 GPU 市面有四个公司产品:Qualcomm, Imagination Technologies,ARM, Vi ...
- 纯CSS实现蜂窝六边形的个性相册
概述 纯CSS实现蜂窝六边形的个性相册 详细 代码下载:http://www.demodashi.com/demo/12804.html 此案例主要用到CSS3的 transform 和 transi ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps ...
- LaTex 常见错误及解决办法
出现错误: Multirow 要用库的 导入\usepackage{multirow} ,,即可
- laravel使用的模板引擎 blade
使用blade引擎的话必须在控制器中使用use Blade
- public static void main(String args[])什么意思?
public static void main(String[] args) 这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要. jvm在试图运行一个类之前,先检查该类是否包 ...
- C#:Ini文件操作(待补充)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- TeleMCU视频会议系统添加字幕支持
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 最新版本号TeleMCU添加了字幕支持,与会者能够看到其它人的名字,做法是在与会者的视频上overlay 文 ...
- JavaScript身份证正则表达式,querySelector通过name获取元素,php正则表达式
var preg_sfz1 = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3 ...