mvc framework example español arquitectura java spring-mvc annotations

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:

  1. Cree una clase personalizada que implemente ServletContainerInitializer (es decir, com.foo.FooServletContainer )
  2. Cree un archivo en su carpeta META-INF/services llamada javax.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[] { "/" }; } }