java - example - spring mvc que es
¿Cómo configurar Spring MVC con una configuración pura basada en Java? (1)
Tengo, lo que consideraría una configuración bastante simple de Spring MVC. Mi applicationContext.xml es este:
<mvc:annotation-driven />
<mvc:resources mapping="/css/**" location="/css/" />
<context:property-placeholder location="classpath:controller-test.properties" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
Mi web.xml es actualmente este:
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Estoy tratando de convertir esta configuración a pura configuración basada en Java. He buscado en la web y, hasta ahora, he encontrado cosas que explican (cómo) cómo hacer la configuración de Java pero no explica cómo registrar esa configuración de Java con el entorno, es decir, el contexto web.
Lo que tengo hasta ahora en términos de @Configuration es esto:
@Configuration
@EnableWebMvc
@PropertySource("classpath:controller.properties")
@ComponentScan("com.project.web")
public class WebSpringConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
}
@Bean
public ViewResolver configureViewResolver() {
InternalResourceViewResolver viewResolve = new InternalResourceViewResolver();
viewResolve.setPrefix("/WEB-INF/views/");
viewResolve.setSuffix(".jsp");
return viewResolve;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){
configurer.enable();
}
}
¿Cómo registro esto con el contenedor web? Estoy usando la última primavera (4.02).
¡Gracias!
Debe realizar los siguientes cambios en web.xml
para admitir la configuración basada en Java. Esto le indicará al DispatcherServlet
que cargue la configuración usando la configuración java basada en la AnnotationConfigWebApplicationContext
. solo necesita pasar la ubicación de su archivo contextConfigLocation
a contextConfigLocation
param. como a continuación
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/*path to your WebSpringConfig*/ </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Actualización: hacer lo mismo sin realizar cambios en web.xml
Incluso puede hacerlo sin web.xml
ya que Servlet Specification 3.0 hace que web.xml
opcional. Solo necesita implementar / configurar la interfaz WebApplicationInitializer
para configurar el ServletContext
que le permitirá crear, configurar, registrar y configurar el DispatcherServlet
programación. Lo bueno es que WebApplicationInitializer
se detecta automáticamente.
El resumen es la necesidad de implementar WebApplicationInitializer
para deshacerse de web.xml
.
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
// Create the ''root'' Spring application context
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(WebSpringConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet''s Spring application context
AnnotationConfigWebApplicationContext dispatcherContext =
new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
Actualización : de los comentarios
Una explicación un poco más enrevesada también se incluye en la referencia oficial de Spring ahora Spring 4 Release Reference: