我想知道为什么要将此值设置为1。我看了api,意思是在这个动态ServletRegistration代表的Servlet上设置loadOnStartup优先级。为什么是1?
我读了一段代码:
public void onStartup(ServletContext servletContext)
throws ServletException {
// TODO Auto-generated method stub
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(WebAppConfig.class);
servletContext.addListener(new ContextLoaderListener(ctx));
ctx.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
我正在添加这个答案,以防其他人看到这篇文章。 根据文档,这比 1 = true 和 0 = false 更复杂。 该值是定义启动时初始化的应用程序将被调用的顺序的优先级。
ServletRegistration.Dynamic.setLoadOnStartup
这个问题涵盖了这一点。
Ahh 1 是 true 的约定。 0 是 false 的约定。您为调度程序 servlet 设置启动时加载,以便 spring 容器将在应用程序服务器(tomcat 等)启动时初始化。
启动时设置加载:
void setLoadOnStartup(int loadOnStartup)
设置此动态 ServletRegistration 表示的 Servlet 的
loadOnStartup
优先级。
大于或等于 0 的 loadOnStartup
值向容器指示
Servlet
的初始化优先级。在这种情况下,容器必须在
Servlet
的初始化阶段实例化并初始化
ServletContext
,即在其
ServletContextListener
方法调用为
ServletContext
配置的所有
ServletContextListener#contextInitialized
对象之后.如果
loadOnStartup
是负整数,则容器可以自由实例化并延迟初始化
Servlet
。
loadOnStartup
的默认值为-1。对此方法的调用会覆盖之前的任何设置。
Parameters:
loadOnStartup - the initialization priority of the Servlet
Throws:
IllegalStateException - if the ServletContext from which this ServletRegistration was obtained has already been initialized