Spring MVC和Servlets 3.0 - 你还需要web.xml吗?

Sot*_*lis 30 java annotations spring-mvc

在典型的Spring MVC Web应用程序中,您可以像这样声明DispatcherServletinweb.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>
Run Code Online (Sandbox Code Playgroud)

与听众,过滤器等一起

使用servlet-api 3.0,您可以使用注释声明servlet,@WebServlet而不是将它们添加到您的web.xml.春季3.2已经@Configuration@EnableXYZ它的上下文配置.是否有类似的东西DispatcherServlet,即.有没有办法配置你的完整的Spring应用程序没有任何xml?

Ale*_*lex 41

使用JEE6,如果您的应用程序容器已准备好Servlet 3.0,那么您需要做的是:

  1. 创建一个实现ServletContainerInitializer的自定义类(即com.foo.FooServletContainer)
  2. 在您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("/");
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是它的web.xml事,但你需要使用配置Web应用程序@Configuration,@EnableWebMvc等等.

  • 你不需要使用`Spring`,因为Spring已经提供了引用`SpringServletContainerInitializer`的文件,它将调用你的`FooInitializer`类.我解释了"META-INF /",以便你了解它在封面下是如何工作的.(我编辑了上面的答案因为它可能不清楚) (8认同)