一、xml中<load-on-startup>作用
简介:<load-on-startup>nub</load-on-startup>可以设置该servlet在加载时的优先级以及是否在容器中加载该servlet
其中的nub为数字:当为正整数是,表示加载,且数字越小代表优先级越高;若为负数,则容器启动时不加载,只有该servlet被选中才加载
<load-on-statrup>1</load-on-startup>
二、该标签在DispatcherServlet中执行过程
1.由于在DispatcherServlet写入了load-on-startup标签,所以在java web项目发布时,Tomcat依次执行的是DispatcherServlet中的静态代码块,构造方法,init()方法
静态方法
static {
// Load default strategy implementations from properties file.
// This is currently strictly internal and not meant to be customized
// by application developers.
try {
ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, DispatcherServlet.class);
defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);
}
catch (IOException ex) {
throw new IllegalStateException("Could not load '" + DEFAULT_STRATEGIES_PATH + "': " + ex.getMessage());
}
}
构造方法:
public DispatcherServlet() {
super();
setDispatchOptionsRequest(true);
}
init()方法:
@Override
public final void init() throws ServletException {
if (logger.isDebugEnabled()) {
logger.debug("Initializing servlet '" + getServletName() + "'");
}
// Set bean properties from init parameters.
PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
if (!pvs.isEmpty()) {
try {
BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
initBeanWrapper(bw);
bw.setPropertyValues(pvs, true);
}
catch (BeansException ex) {
if (logger.isErrorEnabled()) {
logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
}
throw ex;
}
}
其中init方法该方法继承自HttpServletBean抽象类
二、执行DispatcherServlet类initServletBean()方法,该方法继承自FrameworkServlet抽象类;
三、执行DispatcherServlet类initWebApplicationContext()方法,该方法继承自FrameworkServlet抽象类;
@Override
protected final void initServletBean() throws ServletException {
getServletContext().log("Initializing Spring FrameworkServlet '" + getServletName() + "'");
if (this.logger.isInfoEnabled()) {
this.logger.info("FrameworkServlet '" + getServletName() + "': initialization started");
}
long startTime = System.currentTimeMillis();
try {
this.webApplicationContext = initWebApplicationContext();
initFrameworkServlet();
}
catch (ServletException ex) {
this.logger.error("Context initialization failed", ex);
throw ex;
}
catch (RuntimeException ex) {
this.logger.error("Context initialization failed", ex);
throw ex;
}
if (this.logger.isInfoEnabled()) {
long elapsedTime = System.currentTimeMillis() - startTime;
this.logger.info("FrameworkServlet '" + getServletName() + "': initialization completed in " +
elapsedTime + " ms");
}
}