我有一个我认为非常简单的Spring MVC设置。我的applicationContext.xml是这样的:
<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" />
我的web.xml当前是这样的:
<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>
我正在尝试将此设置转换为基于Java的纯配置。我已经搜索了Web,到目前为止,我已经提出了一些东西(这些东西可以解释)(如何做),但是没有解释如何在环境(即Web上下文)中注册该Java配置。
到目前为止,我对@Configuration的了解是:
@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(); } }
如何在Web容器中注册?我正在使用最新的Spring(4.02)。
谢谢!
你需要对进行以下更改,web.xml以支持基于Java的配置。这将告诉你DispatcherServlet使用基于注释的Java配置加载配置AnnotationConfigWebApplicationContext。你只需要将Java配置文件的位置传递给contextConfigLocationparam,如下所示
web.xml
DispatcherServlet
AnnotationConfigWebApplicationContext
contextConfigLocationparam
<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>
更新:在不更改web.xml的情况下进行相同操作
你甚至可以在没有web.xmlServlet规范3.0 web.xml可选的情况下执行此操作。你只需要实现/配置WebApplicationInitializer接口来配置ServletContext,它将允许你以DispatcherServlet编程方式创建,配置和执行注册。好处是可以WebApplicationInitializer自动检测到。
WebApplicationInitializer
ServletContext
总而言之,一个需要实现的WebApplicationInitializer摆脱方法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("/"); } }