servlet/filter/listener/interceptor区别与联系

 下面从几个方面阐述一下题目中四个概念的区别与联系:

         1、概念

         2、生命周期

         3、职责

         4、执行过程

        

         一、概念:

         1、servlet:servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。

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

        3、listener:监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。

         4、interceptor(拦截机):是在面向切面编程的,就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

      5、servlet、filter、listener是配置到web.xml中,interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。 

        二、生命周期:

        1、servlet:servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新结束。
          (1)、装入:启动服务器时加载Servlet的实例; 
        (2)、初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动。初始化工作有init()方法负责执行完成; 
        (3)、调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法; 
        (4)、销毁:停止服务器时调用destroy()方法,销毁实例。 

        

           2、filter:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行) 
         (1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例; 
         (2)、每一次请求时都只调用方法doFilter()进行处理; 
         (3)、停止服务器时调用destroy()方法,销毁实例。

         3、listener:类似于servlet和filter

           web.xml 的加载顺序是:context- param -> listener -> filter -> servlet 

       4、interceptor:以struts的拦截器为例,加载了struts.xml以后,初始化相应拦截器。当action请求来时调用intercept方法,服务器停止销毁interceptor。

       三、职责

       1、servlet:

        创建并返回一个包含基于客户请求性质的动态内容的完整的html页面;
        创建可嵌入到现有的html页面中的一部分html页面(html片段);
        读取客户端发来的隐藏数据;
        读取客户端发来的显示数据;
        与其他服务器资源(包括数据库和java的应用程序)进行通信;
        通过状态代码和响应头向客户端发送隐藏数据。

       2、filter:

        filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应:
        在执行servlet之前,首先执行filter程序,并为之做一些预处理工作;
        根据程序需要修改请求和响应;
        在servlet被调用之后截获servlet的执行

         3、listener:职责如概念。

          servlet2.4规范中提供了8个listener接口,可以将其分为三类,分别如下:
         第一类:与servletContext有关的listner接口。包括:ServletContextListener、ServletContextAttributeListener
         第二类:与HttpSession有关的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、                      HttpSessionActivationListener;
         第三类:与ServletRequest有关的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener

        4、interceptor:与过滤器十分相似,通过层层拦截,处理用户的请求和响应。

 

        备注:web.xml 的加载顺序是:context-param -> listener -> filter -> servlet 。了解了这几个概念的区别以后,不难理论这个加载顺序了。

 

        四、几个区别:

        1,servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制.
        2,filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。
         filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等
        3, servlet,filter都是针对url之类的,而listener是针对对象的操作的,如session的创建,session.setAttribute的发生,在这样的事件发生时做一些事情。
     可用来进行:Spring整合Struts,为Struts的action注入属性,web应用定时任务的实现,在线人数的统计等
 
       4,interceptor 拦截器,类似于filter,不过在struts.xml中配置,不是在web.xml,并且不是针对URL的,而是针对action,当页面提交action时,进行过滤操作,相当于struts1.x提供的plug-in机制,可以看作,前者是struts1.x自带的filter,而interceptor 是struts2 提供的filter.
    与filter不同点:(1)不在web.xml中配置,而是在struts.xml中完成配置,与action在一起
                            ( 2  ) 可由action自己指定用哪个interceptor 来在接收之前做事
    

        5,struts2中的过滤器和拦截器的区别与联系:

      (1)、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
      (2)、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
      (3)、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
      (4)、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
      (5)、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

        

        五、执行流程图:

         1、servlet:

           

          2、filter:

          

               

             

           3、listener:

             

           4、interceptor:

            

            

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑系统哪个最好用_袪痘袪痘印哪个产品最好 祛痘印最好用的产品十大推荐...

原标题:袪痘袪痘印哪个产品最好 祛痘印最好用的产品十大推荐痘痘下去了,痘印却顽固不化。有些痘印如果不及时修复,会留下疤痕和坑。我们真的不敢去想他们。所以有痘印痘印的时候一定要及时使用护肤品,不要在脸上留下什么遗憾&…

五阿哥钢铁电商平台Docker容器云平台建设实践——你想知道的都在这里!

前言 五阿哥钢铁电商平台(www.wuage.com)是由钢铁行业第一的中国五矿与互联网第一的阿里巴巴联手打造,并充分运用双方股东优势资源,即:阿里巴巴在大数据、电商运营、互联网产品技术上的巨大优势,尤其是在B2…

web浏览器_Web上的分享(Share)API

我认为Web Share API非常酷,简而言之,它会利用您所使用的平台上的原生共享功能(如果该平台支持的话)。我喜欢这个:在iOS上激活的Web Share API远远不止这些东西:为什么?Web Share API只是几行代码。简单!没…

exfat单元分配要设置多少_微软宣布,支持往Linux内核里添加exFAT存储了!跨系统存储的福音...

栗子 发自 凹非寺 量子位 报道 | 公众号 QbitAIexFAT,是微软开发的文件系统,为闪存而生。你的U盘、SD卡、手机等等存储设备,能存4G以上的大文件,很大程度上是它的功劳。可exFAT一直是专有的,微软手握多项专利。所以&am…

Jetbrains 系 IDE 编辑器的代码提示功能

著名的 Jetbrains 可谓编程界的一大福音,众多有名代码编辑器比如 ItelliJ IDEA、PHPStorm、WebStorm、PyCharm 等,均出自这家公司麾下。 对于中国的Java开发者来说,可能使用 Eclipse 的人最多。 使用Idea的程序员也不少, 而且每个人都在鼓吹其…

tkmybatis 子查询_真假童子命符箓道长教你如何查询

童子命查询方法一:童子命在相术里,指的是一生都霉运连连如过本命年的人。古代关于真童子命查询有口诀“春秋甲寅子,冬夏卯未辰; 金木乙卯未,水火庚辛壬; 土命逢辰巳,童子定为真”解释上面的口诀…

ECLIPSE配置OSGI服务器

eclipse版本如下: Eclipse Java EE IDE for Web Developers. Version: Mars Release (4.5.0) Build id: 20150621-1200 ------------------------ 1、进入eclipse-----run----run configuration---osgi framework---new 2、取消全选 3、在搜索框中输入 osgi&a…

AD19 add pins to nets错误_为什么我认为Rust的Result错误处理方式不如Exception

由于是对技术的个人评判,欢迎理性讨论。我曾经也当过纯函数式的脑残粉,认为宇宙第一棒的代数数据结构用来处理错误,是无上的优雅和绝对的安全。一个看似人畜无害的接口抛出异常带来的崩溃,是各类疑难杂症的罪魁祸首。综合起来&…

Java @Transient 注解使用

2019独角兽企业重金招聘Python工程师标准>>> 我们建实体类的时候啊,有时候实体类的属性和数据库表字段不一致的时候,比如多一个属性,那你不加这个注解就会报错,因为映射的时候会提示(提示啥我给忘了&#x…

oracle—ebs_采购功能点操作手册,oracle—EBS_采购功能点操作手册

erp实施企业采购模块构架及日常业务操作指导“人力资源”页签可以设置是否“使用审批层次结构”来决定采购单据的审批路径。如不选定,则表示采购单据将使用员工的“主管”结构来进行审批。“员工编号”方法默认自业务组定义时的“员工编号生成”方法设置。1.2采购选…

combobox控件 如何把三角形放大_初中数学|全等三角形全部知识点总结

今天,琦老师为大家整理了[初中数学重要考点,全等三角形的全部知识点],希望帮助大家中考数学快速提分( #小学数学#初中数学#数学)除了图片内容,大米君也为大家分享[如何灵活运用这些知识点的方法]大家记得跟着做起来哦~提高复习效果…

Spring中引入其他配置文件

原文:http://www.cnblogs.com/LiuChunfu/p/5605473.html ------------------------------------------------------------------------------ 一、引入其他 模块XML   在Spring的配置文件,有时候为了分模块的更加清晰的进行相关实体类的配置。 比如…

oracle不要重复记录,Oracle中去重复记录 不用distinct

用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 。select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取…

miui游戏驱动程序偏好设置_米粉必看:小米官方教你如何关闭 MIUI 广告 - 小米,MIUI...

IT之家 11 月 9 日消息 小米的 MIUI 在用户心中的口碑一直是比较好的,但该系统也并非完美,被吐槽的较多的一个点就是系统内的广告比较多。今天,小米官方微博 小米服务那些事 分享了几个能够减少 MIUI 广告的方法,米粉不妨了解一下…

Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式。 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制,但其实Zuul还有更多的应用…

oracle 9 插入日期,oracle date日期类型 精析

一、date1.date、sysdate格式说明展示date类型,展示格式既可以为:YYYY/MM/DD,也可以为YYYY/MM/DD HH24:MI:SS;其存储格式只有一种:YYYY/MM/DD HH24:MI:SS展示格式一:当你只存年月日时,date实际存…

CentOS 7.1下KVM的安装与配置

由于没有物理机可用,在自己的VMware Workation中CentOS 7搭建完成。 首先查看VMware Workation是否支持虚拟化,把红框内打钩即可。 虚拟化开启并安装CentOS系统,建议CentOS安装64bit。我的环境用的是CentOS 7。进入系统,首先查看服…

软件生成问候图片_这些社交软件你玩过几个?

提到聊天软件,我们的手机肯定安装有微信QQ,不过微信QQ都是主打熟人社交,而下面几个软件都是陌生人社交。这些社交软件,总有一款你安装过。注意,非按排名介绍。第一款:陌陌陌陌是一款基于地理位置的开放式移动视频社交应…

Android5.0新控件

谷歌在推出Android5.0的同时推出了一些新控件,Android5.0中最常用的新控件有下面5种。 1. CardView(卡片视图) CardView顾名思义是卡片视图,它继承FrameLayout。它是一个带圆角的背景和阴影FrameLayout。CardView被包装为一种布局…

Druid使用起步—在javaWeb项目中配置监控

原文章:http://my.oschina.net/u/568779/blog/152813 ---------------------------------------------------- druid wiki 当我们在javaWEB项目中使用到druid来作为我们的连接池的时候,一定不会忘了添加监控功能。下面我们就来看一下,在一个…