`

Servlet 学习笔记

阅读更多

http://www.ibm.com/developerworks/cn/java/j-lo-servlet/

 

 

 Servlet 的确已经能够帮我们完成所有的工作了,但是现在的 web 应用很少有直接将交互全部页面都用 servlet 来实现,而是采用更加高效的 MVC 框架来实现。这些 MVC 框架基本的原理都是将所有的请求都映射到一个 Servlet,然后去实现 service 方法,这个方法也就是 MVC 框架的入口。

====> 当请求该servlet时,请求到达wrapper容器后, 开始 call servlet的service方法进行服务 。

====> 1)如 load-on-start up > 0 , 那么在web 应用初始化时便创建servlet实例,并且wrapper容器会call servlet的init方法进行初始化,此时对应的wrapper 已经在context,当用户请求到达wrapper容器后, 开始 call servlet的service方法进行服务 。

====>2)如果 load-on-start up不大于0 , 那么在初始化web应用时,servlet也已经被打包成wrapper加入到context 容器中,当用户请求到达wrapper容器后,wrapper容器会 call loadservelt方法 ,交给 instanceManager去创建servlet, 然后 wrapper容器会call servlet的init方法进行初始化,在就绪之后,wrapper容器 开始 call servlet的service方法进行服务 。

 

###

servlet的生命周期

 

  所谓生命周期,指的是servlet容器如何创建servlet实例,分配其资源,调用其方法,并销毁其实例的整个过程。

阶段一:实例化(创建servlet对象,调用构造器)。在如下两种情况下会进行对象实例化:

  第一种情况:当请求到达容器时,容器查找该servlet对象是否存在。如果不存在才会创建实例。

  第二种情况:容器在启动时,或者新部署了某个应用时,会检查web.xml当中,servlet是否有load-on-starup配置,如果有,则会创建servlet实例。load-on-starup参数值越小,优先级越高(最小值为0,优先级最高)

阶段二:初始化。  

  为servlet分配资源,调用init(ServletConfig config)方法,config对象可以用来访问servlet的初始化参数,初始化参数是使用init-param配置的参数。init()方法可以被重写。

阶段三:就绪/调用

  有请求到达容器,容器调用servlet对象的service()方法。HttpServlet的service()方法会依据请求方式来调用doGet()或者doPost()方法。但是这两个do方法默认情况下会抛出异常,需要子类去重写。

阶段四:销毁。

  容器依据自身的算法,将不再需要的servlet对象删除。在删除之前,会调用servlet对象的destory()方法。destory()方法用于释放资源。

在servlet的整个生命周期中,init(),destory()方法只会执行一次,而service()方法可以被执行多次。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics