java - framework - spring mvc español
Spring MVC y Servlets 3.0-¿Todavía necesita web.xml? (2)
En una aplicación web Spring MVC típica, declara el DispatcherServlet
en web.xml
como tal
<!-- 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>
Junto con oyentes, filtros, etc.
Con servlet-api 3.0, puede declarar sus servlets con la anotación @WebServlet
lugar de agregarlos a su web.xml
. Spring 3.2 ya tiene @Configuration
y @EnableXYZ
para su configuración de contexto. Tiene algo similar para DispatcherServlet
, es decir. ¿hay alguna manera de configurar su aplicación Spring completa sin ningún xml?
Con JEE6, si su contenedor de aplicaciones está listo para Servlet 3.0, lo que debe hacer es:
- Cree una clase personalizada que implemente ServletContainerInitializer (es decir,
com.foo.FooServletContainer
) - Cree un archivo en su carpeta
META-INF/services
llamadajavax.servlet.ServletContainerInitializer
que contendrá el nombre de su implementación anterior (com.foo.FooServletContainer
)
Spring 3 se incluye con una clase llamada SpringServletContainerInitializer
que implementa lo mencionado anteriormente (por lo que no es necesario crear el archivo en META-INF/services
. Esta clase solo llama a una implementación de WebApplicationInitializer
. Por lo tanto, solo debe proporcionar una clase implementándolo en su classpath (el siguiente código está tomado del documento anterior).
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("/");
}
}
Eso es todo para la cosa web.xml
, pero necesita configurar la aplicación web usando @Configuration
, @EnableWebMvc
, etc.
Sí, no necesitas web.xml
para iniciar tu aplicación de Servlet 3.0+. Como Alex ya mencionó, puedes implementar la clase WebApplicationInitializer
e ignorar el método onStartup()
. WebApplicationInitializer
es una interfaz proporcionada por Spring MVC que garantiza que su implementación se detecte y se use automáticamente para inicializar cualquier contenedor de Servlet 3.
¿Hay alguna manera de configurar su aplicación Spring completa sin ningún xml?
Agregando esta respuesta solo para agregar otra forma. No es necesario implementar WebApplicationInitializer
. Una implementación de clase base abstracta de WebApplicationInitializer
denominada AbstractDispatcherServletInitializer
hace que sea aún más fácil registrar el DispatcherServlet simplemente redefiniendo los métodos para especificar la asignación de servlet y la ubicación de la configuración de DispatcherServlet.
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
@Override
protected WebApplicationContext createServletApplicationContext() {
XmlWebApplicationContext cxt = new XmlWebApplicationContext();
cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
return cxt;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}