在实际的Java开发过程中,Servlet、Filter、Interceptor和Listener是经常会被用到的,这篇文章,我们以图文的形式来形象具体地分析一下这四项内容。
1、Servlet
简介:
首先Servlet是一种服务端的Java应用程序,运行于客户端请求和服务器相应的中间层。它和jsp本质上是一种东西,只不过jsp是Servlet中分离出的静态页面部分。
功能与服务:
Servlet的主要功能在于交互式地浏览和修改web数据,生成动态web内容。
Servlet服务流程图:
生命周期:
当Server不再需要 Servlet时(一般当 Server关闭时),Tomcat服务器会调用 Servlet的 destroy()方法。
安全:
在 Web 应用程序中,一个 Servlet 在一个时刻可能被多个用户同时访问。这时 Web 容器将为每个用户创建一个线程来执行 Servlet。如果 Servlet 不涉及共享资源的问题,不必关心多线程问题。但如果 Servlet 需要共享资源,需要保证 Servlet 是线程安全的。
2、Filter
简介:
过滤器,它一般用来修对某一资源的请求,或者修改从某处发出的某一响应。它实现了javax.servlet.Filter接口的服务器端程序。
功能与服务:
Filter的主要用途是过滤字符编码、事务控制、权限管理等。只要你在配置文件(web.xml)中配好要拦截的请求,就可以对请求或响应统一设置。
生命周期:
Filter随web应用的启动而启动,只初始化一次,随web应用的停止或重新部署而销毁。
与Servlet:
Filter主要是对请求预处理或后处理,是个处理链。它不能直接向用户生成响应,这是与Servlet的最大区别。联系:Filter一般先对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理,如下图:
至于Filter的配置,分两步:建立Filter处理类,然后在配置文件中配好就可以了。很简单,大家自己找几个例子吧~
3、Listener:
简介:
监听器,也就是用来实现监听功能的。都监听什么?
Listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象有所变化时自动执行代码的功能组件。
例如:
Spring 的监听器会在服务器启动的时候实例化我们配置的bean对象;
Hibernate的session 监听器会监听session的活动和生命周期,负责创建,关闭session等活动。
Servlet的监听器主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
生命周期:
它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。
图示:
4、Interceptor:
简介:
拦截器,它基于反射机制,用于在一个方法执行前或执行后调用一个方法。比如我们的动态代理就是拦截器的简单实现,在你调用方法前或者调用方法后做其它业务逻辑的操作,甚至可以在抛出异常的时候做业务逻辑的操作。
生命周期:
以struts的拦截器为例,加载了struts.xml以后,初始化相应拦截器。当action请求来时调用intercept方法,服务器停止销毁interceptor。
Struts2中与Filter:
(1)、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
(2)、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
(3)、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
(4)、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
(5)、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
(6)、配置在struts.xml中,过滤器配置在web.xml中。
图示:
小结:
Servlet、Filter都是针对url的,而Listener是针对对象操作的,Interceptor是对action的。
在理解他们原理和机制的基础上,进行实践,才能合理、合适的利用好他们,实现程序的运行和功能实现。