<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext instead of the default XmlWebApplicationContext --> <context-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </context-param> <!-- Configuration locations must consist of one or more comma- or space-delimited fully-qualified @Configuration classes. Fully-qualified packages may also be specified for component-scanning --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>springdemo.config.AppConfig</param-value> </context-param> <!-- Bootstrap the root application context as usual using ContextLoaderListener --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Declare a Spring MVC DispatcherServlet as usual --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext instead of the default XmlWebApplicationContext --> <init-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </init-param> <!-- Again, config locations must consist of one or more comma- or space-delimited and fully-qualified @Configuration classes --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>springdemo.config.MvcConfig</param-value> </init-param> </servlet> <!-- map all requests for /app/* to the dispatcher servlet --> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
@EnableWebMvc @Configuration @ComponentScan(basePackages={"springdemo.controller"}) public class MvcConfig { /** * 配置JSP視圖解析器 * @return */ @Bean public ViewResolver viewResolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeansAsAttributes(true); return resolver; } /** * 配置默認的Servlet來處理靜態資源 * @return */ @Bean public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){ return new WebMvcConfigurerAdapter() { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }; } }
@Controller public class CoffeeController { @RequestMapping(value="/show",method=RequestMethod.GET) public String showCoffee(){ return "coffee"; } }
@RunWith(SpringRunner.class) @WebAppConfiguration @ContextConfiguration(classes={MvcConfig.class}) public class CoffeeTest { private MockMvc mockMvc; @Autowired private WebApplicationContext wac; @Before public void init(){ mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); } @Test public void testShowCoffee() throws Exception{ ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders.get("/show")); resultActions.andExpect(MockMvcResultMatchers.view().name("coffee")); } }
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{AppConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{MvcConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
pom.xml :Spring pom.xml配置html