zoukankan      html  css  js  c++  java
  • filter与servlet的比较

    最近在开java的东西,还记得刚开始使用servlet是在调试一个ajax的时候,那时候不知道如何使用,就知道写一个路径去调用,总是提示404错误,以为是相对路径与绝对路径的问题,到最后自己一点点的调通了,知道servlet是需要服务器编译运行,是需要配置web.xml的。到学习filter,发现他们的套路完全是一样的,也需要在web.xml中进行相应的配置。可以说是基本一样的,我不禁要问,他们之间有什么异同呢。

            遇到问题的时候也是学习的时候,我就在网上找了点相关的资料,与大家分享一下:
            主要从如下四个方面介绍他们之间的区别:
                    1.概念。
                    2.生命周期。
                    3.职责。

                    4.执行过程。

        一、概念:
     
             1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
     
             2、filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。


           二、生命周期:
     
            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()方法,销毁实例。

      三、职责
     
           1、servlet:
     
            创建并返回一个包含基于客户请求性质的动态内容的完整的html页面;
            创建可嵌入到现有的html页面中的一部分html页面(html片段);
            读取客户端发来的隐藏数据;
            读取客户端发来的显示数据;
            与其他服务器资源(包括数据库和java的应用程序)进行通信;
            通过状态代码和响应头向客户端发送隐藏数据。
     
           2、filter:
     
            filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应:
            在执行servlet之前,首先执行filter程序,并为之做一些预处理工作;
            根据程序需要修改请求和响应;
            在servlet被调用之后截获servlet的执行


            四、区别:

          1,servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制.
            2,filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。
             filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等


     五、执行流程图:

             1、servlet:

                   

              2、filter:

               

    总结:

            刚刚开始java的学习,对于两者的理解也只有这些了,但是在我的学习过程中,发现其实不止是有这两个的比较,还有listener和interceptor,他们四者的区别和联系。我现在还没有很好的把控,等学到的时候一起做总结吧。

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/sanhuan/p/6515181.html
Copyright © 2011-2022 走看看