Spring MVC和Servlets 3.0-您仍然需要web.xml吗?
问题内容:
在典型的Spring MVC Web应用程序中,您将像这样声明DispatcherServlet
inweb.xml
<!-- MVC Servlet -->
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
以及侦听器,过滤器等
使用servlet-api 3.0,您可以使用注释声明servlet,@WebServlet
而不必将其添加到web.xml
。Spring
3.2已经有了@Configuration
并@EnableXYZ
为其上下文配置。它是否有类似的东西DispatcherServlet
,即。有没有一种方法可以配置没有任何xml的完整Spring应用程序?
问题答案:
使用JEE6,如果您的应用程序容器已准备好Servlet 3.0,那么您需要做的是:
- 创建一个实现ServletContainerInitializer的自定义类(即
com.foo.FooServletContainer
) - 在
META-INF/services
名为的文件夹中创建一个文件,javax.servlet.ServletContainerInitializer
其中将包含上述实现的名称(com.foo.FooServletContainer
)
Spring
3捆绑了一个名为的类SpringServletContainerInitializer
,该类实现上述内容(因此,您无需在中创建文件META- INF/services
。该类仅调用。的实现WebApplicationInitializer
。因此,您只需要在类路径中提供一个实现它的类即可(以下代码摘自上面的文档)。
public class FooInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
WebApplicationContext appContext = ...;
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
这是它的web.xml
事,但你需要使用配置Web应用程序@Configuration
,@EnableWebMvc
等等。