Servlet专题1-servlet生命周期及运行机制

2019-08-21  本文已影响0人  Ray1983

前言:无论是struts1、2还是spring mvc,我们都不能绕开Servlet,我准备用一个专题来深入了解servlet和剖析servlet的运行机制。

首先我们要讲到的是servlet的生命周期,servlet生命周期是在面试中被经常问到的一个内容。所以我们经常会遇到类似的问题,现在在这里做一个标准答案。

1.被创建:执行init方法,只执行一次

  1.1Servlet什么时候被创建?

  --第一次调用的时候就会被创建;

  --可以通过配置改变被创建的时间;

2.提供服务:执行service方法,执行多次

3.被销毁:当Servlet服务器正常关闭时,执行destroy方法,只执行一次

上面遗留了一个问题,那就是Servlet的创建时间可以通过配置,网络上有很多关于创建时间的配置时关于  load-on-startup的,配置如下

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  <display-name>webXml</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

  </welcome-file-list>

  <servlet>

  <servlet-name>S1</servlet-name>

  <servlet-class>com.web.servlet.S1</servlet-class>

  <load-on-startup>1</load-on-startup>

  </servlet>

<servlet-mapping>

  <servlet-name>S1</servlet-name>

  <url-pattern>/s1</url-pattern>

  </servlet-mapping>

其中的  <load-on-startup>1</load-on-startup>节点,代表的就是加载的顺序。配置了这个节点会导致项目在启动的时候就会初始化servlet。

其次还有另外一个配置也会导致项目加载的时候就会初始化servlet,那就是  <url-pattern>/s1</url-pattern>,将其改成  <url-pattern>/*</url-pattern>会导致servlet被提前加载(tomcat启动的时候)

如果有两个Servlet,一个配置了  <load-on-startup>1</load-on-startup>,另外一个配置了拦截路径规则<url-pattern>/*</url-pattern>时,先创建配置了<load-on-startup>1</load-on-startup>的节点。

上一篇 下一篇

猜你喜欢

热点阅读