Servlet3.0之后,提供了注解,使得不需要在web.xml中进行servlet的配置。
在原web.xml中,<load-on-startup>1</load-on-startup>的作用:
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
3)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
4)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
5)当值相同时,容器就会自己选择顺序来加载。
在基于java注解的配置中,实现WebApplicationInitializer类都可以在web应用程序启动时被加载。
WebApplicationInitializer必须通过SpringServletContailnerIntializer才能加载。
public interface WebApplicationInitializer { void onStartup(ServletContext servletContext) throws ServletException; }
SpringServletContainerInitializer:
@HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer { @Override public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException { List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>(); if (webAppInitializerClasses != null) { for (Class<?> waiClass : webAppInitializerClasses) { if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) && WebApplicationInitializer.class.isAssignableFrom(waiClass)) { try { initializers.add((WebApplicationInitializer) waiClass.newInstance()); } catch (Throwable ex) { throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex); } } } } if (initializers.isEmpty()) { servletContext.log("No Spring WebApplicationInitializer types detected on classpath"); return; } servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath"); AnnotationAwareOrderComparator.sort(initializers); for (WebApplicationInitializer initializer : initializers) { initializer.onStartup(servletContext); } } }
注:
1.要实现ServletContainerInitializer接口,必须指定实现的类。@HandlesTypes就起到关键性作用。
2.在spring-web-x.x.x..RELEASE.jar中META-INF/services/javax.servlet.ServletContainerInitializer里面的内容必须是实现ServletContainerInitializer的类。
javax.servlet.ServletContainerInitializer:
org.springframework.web.SpringServletContainerInitializer
ServletContainerIntializer:
public interface ServletContainerInitializer { void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException; }
相关推荐
用于解决异常项目中No Spring WebApplicationInitializer types detected on classpath
INFO: No Spring WebApplicationInitializer types detected on classpath 九月 18, 2013 11:39:04 上午 org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring root WebApplicationContext ...
服务器启动时,由WebApplicationInitializer初始化Spring配置。 最终访问地址 -> http:// localhost:8080 / 工程名 / data / person?id = 15 输出将显示如下 ↓ JSON { “id” :15 ,“location” :“Varanasi...
相反,它依赖于Spring的WebApplicationInitializer类,因此不需要web.xml。 如何建造 让Maven编译代码: mvn compile 如果出现错误,请检查您的计算机上是否安装了Thrift二进制文件。 如果没有,请访问以下载并...
Spring启动演示概述该项目演示了一个典型的...Spring Web MVC配置扩展WebMvcConfigurerAdapter 定义资源处理程序(静态资源和webjar需要此) @EnableWebMvc @ComponentScan您的控制器扩展WebApplicationInitializer
这可以由实现 org.springframework.web.WebApplicationInitializer 的类替换。 见技术栈:春天: 弹簧芯SpringMVC 弹簧 ORM Spring交易弹簧测试ORM/持久性: HibernateHibernateJPA Hibernate JPA 元模型生成JAX-RS...
发生的情况是 Jersey 的SringWebInitializer注册了它自己的ContextLoaderListener并且我们尝试从我们的WebApplicationInitializer加载另一个的尝试导致抛出异常。 这让我很头疼。 然后我发现了这个,它有一些变通...
Spring MVC 初始化程序示例 使用WebApplicationInitializer而不是web.xml基本 Spring MVC 4.0.x 应用程序。
Spring MVC 初始化程序示例使用WebApplicationInitializer而不是web.xml基本 Spring MVC 4.0.x 应用程序。 查看 !要求 快速开始mvn jetty:run 将浏览器指向
spring mvc的版本是5.x的,sping mvc的入口是 DispatcherServlet 类 ,在之前的ssm项目中,我们是通过配置在web.xml中的servlet把请求的入口设置为DispatcherServlet,现在的版本官方不提倡编写web.xml,而是如下: ...
java8 源码 Learn Spring Bean 注解 Target 关联注解 所在模块 所在包 ...事务(Transactional) ...学习Spring的关键 ...注解就相当于在业务开发中...WebApplicationInitializer 这个类,做了很多 web 容器初始化的工作。 sprin
低XML节食的AppFuse 这是... 它包括以下内容: Spring XML到Java Spring Security配置到Java web.xml到WebApplicationInitializer Spring MVC到Java 迁移到Spring Boot Maven到Groovy 您可以在看到正在执行的这些步骤。