zoukankan      html  css  js  c++  java
  • 使用JavaConfig配置SpringMVC

    目录结构

    web.xml:

    <?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>
    

    SpringMVC配置类:

    @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:

    @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"));
    	}
    }
    

    可以选择继承AbstractAnnotationConfigDispatcherServletInitializer来替换web.xml中的配置:

    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配置

  • 相关阅读:
    测试报告M2
    11.24Daily Scrum(4)
    11.24Daily Scrum(3)
    11.24Daily Scrum(2)
    11.24Daily Scrum
    11.22Daily Scrum(2)
    11.22Daily Scrum
    Echarts中graph类型的运用求教
    Echarts学习求教
    用node编写自己的cli工具
  • 原文地址:https://www.cnblogs.com/seve/p/11094664.html
Copyright © 2011-2022 走看看