如何使用Spring MVC 在Java应用程序上下文中标记?

我已经“暂时”创建了一个简单而基本的spring Web应用程序。我习惯将部署描述符作为简单的web.xml文件,然后将应用程序上下文作为xml文件。

不过,现在我想尝试仅使用Java文件创建整个Spring

Web应用程序。因此,我创建了WebApplicationInitializer而不是常规部署描述符,并且创建了使用@Configuration批注的应用程序上下文。

package dk.chakula.config;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.WebApplicationInitializer;

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

import org.springframework.web.servlet.DispatcherServlet;

/**

*

* @author martin

* @since 12-1-2012

* @version 1.0

*/

public class Initializer implements WebApplicationInitializer {

@Override

public void onStartup(ServletContext servletContext)

throws ServletException {

registerDispatcherServlet(servletContext);

}

private void registerDispatcherServlet(final ServletContext servletContext) {

WebApplicationContext dispatcherContext = createContext(ChakulaWebConfigurationContext.class);

DispatcherServlet dispatcherServlet = new DispatcherServlet(dispatcherContext);

Dynamic dispatcher = servletContext.addServlet("dispatcher", dispatcherServlet);

dispatcher.setLoadOnStartup(1);

dispatcher.addMapping("/");

}

private WebApplicationContext createContext(final Class<?>... annotatedClasses) {

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

context.register(annotatedClasses);

return context;

}

} //End of class Initializer

package dk.chakula.config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.view.UrlBasedViewResolver;

import org.springframework.web.servlet.view.tiles2.TilesConfigurer;

import org.springframework.web.servlet.view.tiles2.TilesView;

/**

*

* @author martin

* @since 12-01-2013

* @version 1.0

*/

@Configuration

@EnableWebMvc

@ComponentScan("dk.chakula.web")

public class ChakulaWebConfigurationContext {

@Bean

public TilesConfigurer setupTilesConfigurer() {

TilesConfigurer configurer = new TilesConfigurer();

String[] definitions = {"/layout/layout.xml"};

configurer.setDefinitions(definitions);

return configurer;

}

@Bean

public UrlBasedViewResolver setupTilesViewResolver() {

UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();

viewResolver.setViewClass(TilesView.class);

return viewResolver;

}

} //End of class ChakulaWebConfigurationContext

我的问题是我似乎找不到“隔离”到包含图像,CSS JavaScript等资源文件夹的映射的方法。当我的应用程序上下文在Java中时。

在普通的XML应用程序上下文中,我使用了这个标签来隔离到/ resources /的映射。

<mvc:resources mapping="/resources/**" location="/resources/" />

我该怎么做,以便我的Web应用程序可以使用我的图像,CSS等。

回答:

为了能够在Spring MVC应用程序中提供静态资源,您需要两个XML标签:<mvc:resources/><mvc:default-

servlet-handler/>。在基于Java的Spring配置中,相同的是:

@Configuration

@EnableWebMvc

public class WebMvcConfig extends WebMvcConfigurerAdapter {

// equivalents for <mvc:resources/> tags

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);

registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(31556926);

registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);

}

// equivalent for <mvc:default-servlet-handler/> tag

@Override

public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {

configurer.enable();

}

// ... other stuff ...

}

请注意,由于使用了@EnableWebMvc注释,因此无需直接扩展WebMvcConfigurationSupport,而只需扩展WebMvcConfigurerAdapter。有关详细信息,请参见JavaDoc

for @EnableWebMvc。

以上是 如何使用Spring MVC 在Java应用程序上下文中标记? 的全部内容, 来源链接: utcz.com/qa/402313.html

回到顶部