-
千呼万唤始出来,那么开篇之前,读者们需要大概了解一下,什么是Servlet?
- Servlet,即Server Applet,全称Java Servlet。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
- 狭义上的Servlet是指Java语言实现的一个接口。
- 广义上的Servlet是任何实现了Servlet借口的类。
看完上文后,相信大部分的读者已经知道Servlet是用来干什么的了。简单的说,Servlet就是服务器端用来处理请求和响应的代码块。但是,Servlet并不是一写出来就可以使用的,在某种程度上说,Servlet也需要“人”帮助才能发挥作用。
-
是什么人帮助Servlet发挥作用?没错,就是web容器。
-
Web容器帮助Servlet的概述如下:
- 当新的请求到来的时候,必须由web容器实例化Servlet,或者至少创建一个新的线程来处理这个请求。
- 必须由web容器调用servlet的**doPost()或者doGet()**方法处理该请求。
- 当然,在请求的时候还需要传递两个参数给Servlet,即请求响应对象(HttpServletRequest/Response)。
-
那么,到底什么是Web容器?讲道理,市面容器产品有很多,比如tomcat、jetty等、
-
其实,在服务器后台运行的Web服务应用程序(后台代码),每次得到一个指向Servlet的请求时,服务器(程序)并不是把这个请求直接交给该Servlet处理,而是交给部署该Servlet的Web容器。要由容器向Servlet提供请求或者响应,并且还要由容器调用Servlet的方法(doGet/Post)。
-
-
-
为什么要用容器统一管理Servlet,这样做有什么好处呢?
- 好处一,通信支持。利用容器提供的方法,能够轻松的让Servlet和服务器交互,而不必建立Socket来监听某个端口、创建流等。
- 好处二,生命周期的管理。Web容器控制着Servlet的生死,容器会负责类加载、实例化和初始化Servlet,调用相应的方法等,以使Servlet实例能够被GC回收。
- 好处三,多线程的支持。Web容器会自动地为每个Servlet请求创建一个新的Java线程。
- 好处四,JSP支持。其实JSP在某种程度上来说,就是Servlet。
-
讲完容器,我们还是回到Servlet相关,并讲讲其生命周期。
-
大概流程:
- Servlet类加载—>Servlet实例化—>调用init()方法—>调用service()方法—>调用destory()方法
- Servlet类加载—>Servlet实例化—>调用init()方法—>调用service()方法—>调用destory()方法
-
Servlet实例化,一般是调用无参构造函数。
-
调用init方法,在Servlet整个生命周期只能调用一次,且必须在调用Service()之前完成。
-
调用Service()方法,在这个阶段,都是处理客户请求。
-
调用destory(),在Servlet被杀死之前(GC回收),有机会进行资源的清除处理。一生只能调用一次。
-
-
讲了那么多,最后的生命周期在面试中经常被问到,准备面试的可以着重看,不懂的可以参考其他博文。
参考链接: