分析Servlet、Filter、Interception和Listener

来源:互联网 发布:mysql怎么取消主键 编辑:程序博客网 时间:2024/05/01 16:28

         在实际的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的。

            在理解他们原理和机制的基础上,进行实践,才能合理、合适的利用好他们,实现程序的运行和功能实现。

         

            

0 0
原创粉丝点击