-
tomcat启动,加载web.xml或servlet类上的Annotation为每一组servlet的配置都生成一个ServletConfig对象
-
用户第一次通过url访问web资源(如:http://localhost/servlet04/hello)
-
Servlet容器会检查用户访问的url是不是对应一个Servlet
服务器会比对服务器上每一个ServletConfig对象所封装的url是不是和你请求的url相同。如果相同,就找到了目标servlet对应的ServletConfig对象 -
实例化Servlet对象,并调用init方法把对应的ServletConfig对象传给Servlet
HelloServlet hser=new HelloServlet();
Hser.init(ServletConfig s1);
-
调用Servlet对象的service方法
Tomcat接受的标准的http协议请求,并将请求所有信息封装一个对象。
ServletRequest req = new ServletRequest ();//封装了对客户端的输入流
Tomcat将http协议的响应封装一个对象
SerlvetResponse res; //封装了对客户端的输出流
Hser.service(ServletRequest req,ServletResponse res);
-
第二次访问url对应的servlet时,直接调用servlet对象的service方法
servlet是单实例长驻服务器内存的,只有第一次访问才实例对象,并调用init方法
-
当服务器宕机时,会调用Servlet的destroy方法
补充:
//第一种书写
@WebServlet(value="/welcome",loadOnStartup=0)
//第二种书写
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.oracle.HelloServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
如果loadOnStartup=1,启动Tomcat就实例化servlet对象并调用init方法,否则的话,第一次访问才实例化servlet对象。
loadOnStartup值越小,越优先实例化