多语言网站建设幻境,做哪个网站最简单,简历模板大学生免费,网络规划与设计专业由于最近两个月工作比较清闲#xff0c;个人也比较“上进”#xff0c;利用工作空余时间#xff0c;也继续学习了一下#xff0c;某天突然想起struts2和struts1的区别的时候#xff0c;发现为什么struts1要用servlet#xff0c;而struts2要用filter呢#xff1f;一时又发…由于最近两个月工作比较清闲个人也比较“上进”利用工作空余时间也继续学习了一下某天突然想起struts2和struts1的区别的时候发现为什么struts1要用servlet而struts2要用filter呢一时又发现servlet和filter有什么区别呢于是看了看web.xml一时又发现咦servlet、filter、listener还有个interceptor对于这几个概念本应是初学者就掌握的东东了可惜本人基础学的不好只能是现在补课。于是就有了这篇博客。 慢慢来吧需要补课的地方还有很多很多呀。初学的时候都不知道他们存在呢。呵呵。 下面从几个方面阐述一下题目中四个概念的区别与联系 1、概念 2、生命周期 3、职责 4、执行过程 一、概念 1、servletservlet是一种运行服务器端的java应用程序具有独立于平台和协议的特性并且可以动态的生成web页面它工作在客户端请求与服务器响应的中间层。 2、filterfilter是一个可以复用的代码片段可以用来转换HTTP请求、响应和头信息。Filter不像Servlet它不能产生一个请求或者响应它只是修改对某一资源的请求或者修改从某一的响应。 3、listener监听器从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作并根据其要求作出相应的响应。通俗的语言说就是在applicationsessionrequest三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。 4、interceptor是在面向切面编程的就是在你的service或者一个方法前调用一个方法或者在方法后调用一个方法比如动态代理就是拦截器的简单实现在你调用方法前打印出字符串或者做其它业务逻辑的操作也可以在你调用方法后打印出字符串甚至在你抛出异常的时候做业务逻辑的操作。 5、servlet、filter、listener是配置到web.xml中interceptor不配置到web.xml中struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。 二、生命周期 1、servletservlet的生命周期始于它被装入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应用定时任务的实现在线人数的统计等 4interceptor 拦截器类似于filter,不过在struts.xml中配置不是在web.xml,并且不是针对URL的而是针对action,当页面提交action时进行过滤操作相当于struts1.x提供的plug-in机制可以看作前者是struts1.x自带的filter,而interceptor 是struts2 提供的filter. 与filter不同点不在web.xml中配置而是在struts.xml中完成配置与action在一起 ( 2 ) 可由action自己指定用哪个interceptor 来在接收之前做事 5struts2中的过滤器和拦截器的区别与联系 1、拦截器是基于java反射机制的而过滤器是基于函数回调的。 2、过滤器依赖与servlet容器而拦截器不依赖与servlet容器。 3、拦截器只能对Action请求起作用而过滤器则可以对几乎所有请求起作用。 4、拦截器可以访问Action上下文、值栈里的对象而过滤器不能。 5、在Action的生命周期中拦截器可以多次调用而过滤器只能在容器初始化时被调用一次。 五、执行流程图 1、servlet 2、filter 3、listener 4、interceptor 转载于:https://www.cnblogs.com/mingf123/p/3760025.html