Servlet的加载(执行过程,原理)和生命周期

 

Web服务器(tomcat,即Servlet容器)装载,执行并管理Servlet的过程
l 客户向服务器发送对页面的请求。Web服务器将请求转化为
ServletRequest 对象
l 如果Servlet还没有装入(加载),服务器就装入它。-------------servlet实例化成对象

Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的
从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,
该Web服务器必须包含 支持Servlet的Java虚拟机。


l 服务器把请求信息送给Servlet,给每一个请求创建一个执行的新线程。-------servlet初始化init()
l Serlvet执行service()方法,处理这个请求,生成一个响应并传递给服务器。
l 服务器(Servlet容器,tomcat)把响应返回给客户端

 

 

 

 

 

 

Servlet 容器(即tomcat)创建 Servlet 的一个实例
l Servlet 的生命周期就是指创建 Servlet 实例之后其存在的时间以及何时消

l 生命周期的 3个方法为:

init()

当Servlet被Servlet容器载入后,程序的init()方法会被Servlet容器自动调用。
因此如果希望web应用在启动时预先执行一些初始化的操作,就可以把实现这
些操作的代码写在一个Servlet程序的init()中。一旦初始化方法完成,
Servlet就能接收客户端的请求。

一个Servlet在生命周期中只能初始化一次,所以对Servlet进行了修改,需要重
启Tomcat。Tomcat配置中也可以配置自动重载,conf/ser ver.xml中的
<context>元素有一个reloadable属性

service()

service()方法是抽象方法,
GenericServlet的子类必须重写该方法。

 

destroy()

 

 

 

Sevlet生命周期:指Servlet对象在服务器内存中从创建到调用,到销毁的整个过程,主要研究该过程中哪些方法对我
们的开发有用。
(1)实例化:当客户端通过URL请求的时候,web容器根据web xm配置自动调用该Srvlet的构造方法,实例化对
象。
(2)初始化:通过该sevlet对象调用nit)方法,读取web xml中该servlet的配置信息,为sevice方法提供相关数据。
(3)服务:通过该对象调用service(万方法,如果是继承HtpSevlet,则根据请求头信息中的请求方法,调用对应的
doGet()/doPost()
(4)销毁:不是在service0万方法调用完后,立即调用,而是由JVM来决定。当JVM需要销毁一些对象、 释放内存空间

的时候,才会去调用该实例的destroy(方法。

 

Servlet生命周期
1.web服务器启动时,会对servlet进行实例化操作
2.第一次访问servlet时,会调用init方法进行初始化操作,这个操作只进行一次
3.每次访问servlet时,都会调用service方法进行真正的请求和响应
4.web服务器关闭时,会调用destroy进行销毁操作
5.在整个生命周期期间,init()和destroy()都各执行一次
6.与web服务器同生共死

 

Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web
容器负责的。
l 当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置
文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再
实例化该Servlet类,也就是有 多个线程在使用这个实例。
l Servlet容器会自动使用线程池等技术来支持系统的运行

 

 

 

 

 

HttpServlet在javax.servlet.http包中,它扩展了GenericServlet类。
HttpServlet类定义了service()方法和六个doXXX()方法。
l HttpServlet中处理客户端请求的业务逻辑代码是在doXXX()方法中实现,
不是在Service()方法中实现的。 HttpServlet类对Service()方法做了重置,
它实现的业务逻辑功能是:根据客户端HTTP请求类型决定应该调用哪个
doXXX()方法来处理客户端的请求。

如果选择HttpServlet为Servlet程序的父类,没有必要重置service()方法,
而是应该根据Http请求的类型,重置相应的 doXXX()方法来处理客户端请
求。

 

web容器将http请求,封装在HttpServletRequest对象中,并产生一个
HttpServletResponse对象,以这两个对象做为参数,调用doXXX()方
法。

posted @ 2020-08-23 12:55  龙陌  阅读(1481)  评论(1编辑  收藏  举报