zoukankan      html  css  js  c++  java
  • Servlet简单总结

      最近在补充java web方面的只是,所以第一期选择进行servlet方面的文章的总结。

      简单得说,servlet的作用就是为客户提供服务,也就是接受一个客户的请求,然后做出反应再返回。servlet能够完成基本的http请求处理。也就是客户端传过来一些参数,然后servlet接受并且使用这些参数,然后迅速地做出响应。

      下面我将从servlet的生命周期,处理客户请求的线程模型,继承体系,优缺点四个方面对servlet进行一个笼统的介绍。

    1.servlet的生命周期

    //详情请见https://www.cnblogs.com/lgk8023/p/6427977.html

    (1)加载servlet类

      在客户端向web服务器发出请求后,Web服务器进行请求的接收,然后再将请求发送给servlet,这时servlet容器需要进行servlet类的加载。在进行servlet类加载时需要知道servlet类的地址(本地地址或者网络地址),通过地址的引导找到类再进行类的加载。

    (2)实例化

      在加载完servlet类后,需要进行实例化。也就是进行servlet构造方法的调用,值得注意的是,在这是并没有生成servlet对象。

    (3)初始化

      在构造方法调用完毕后,会进行servlet的init()函数的调用,这个方法在servlet一生中只会调用一次,在这一步才会生成servlet对象。

    (4)请求处理

      在这一步,会调用servlet的service()方法(GenericServlet类与HttpServlet类不同,GenericServlet类无论是get还是post都使用service(),HttpServlet在使用get方法时使用doGet()方法,在使用post方法时使用doPost()方法),rvlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。

    (5)服务终止

      在这一步,会调用destroy()方法进行服务的终止。

    2.处理客户请求的线程模型

    //详情请见https://www.cnblogs.com/GtShare/p/8033637.html

      Servlet采用多线程来处理多个请求同时访问。servlet依赖于一个线程池来服务请求。线程池实际上是一系列的工作者线程集合。Servlet使用一个调度线程来管理工作者线程。

      当容器收到一个Servlet请求,调度线程从线程池中选出一个工作者线程,将请求传递给该工作者线程,然后由该线程来执行Servlet的service方法。当这个线程正在执行的时候,容器收到另外一个请求,调度线程同样从线程池中选出另一个工作者线程来服务新的请求,
    容器并不关心这个请求是否访问的是同一个Servlet.当容器同时收到对同一个Servlet的多个请求的时候,那么这个Servlet的service()方法将在多线程中并发执行。 Servlet容器默认采用单实例多线程的方式来处理请求,这样减少产生Servlet实例的开销,提升了对请求的响应时间,对于Tomcat可以在server.xml中通过<Connector>元素设置线程池中线程的数目。

     3.继承体系

      任何一个类继承了servlet接口就是一个servlet程序,在实际使用中继承有两种继承,分别是GenericServlet与HttpServlet,这两种都是Servlet接口的实现,只不过GenericServlet类与HttpServlet类不同,GenericServlet类无论是get还是post都使用service(),HttpServlet在使用get方法时使用doGet()方法,在使用post方法时使用doPost()方法。

    4.优缺点

      优点:servlet相比于传统的CGI(通用网关接口)编程,具有更高的效率,更容易使用,功能更强大,具有更好的移植性,更节省投资。

      缺点:web.xml配置量太多(servlet3.0不需要配置web.xml);servlet具有容器依赖性,不利于单元测试;请求很局限;页面内容展示极差。

    <!--本人小白一个,有什么错请大神指教-->

      

  • 相关阅读:
    全新的ASP.NET !
    asp.net core+ef core
    直播服务器Nginx
    NET Core1
    网络爬虫1
    java thread reuse(good)
    java中Executor、ExecutorService、ThreadPoolExecutor介绍(转)
    小心LinkedHashMap的get()方法(转)
    LinkedHashMap相关信息介绍(转)
    HashTable和HashMap的区别
  • 原文地址:https://www.cnblogs.com/duowenjia/p/10531261.html
Copyright © 2011-2022 走看看