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具有容器依赖性,不利于单元测试;请求很局限;页面内容展示极差。

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

  

猜你喜欢

转载自www.cnblogs.com/duowenjia/p/10531261.html