构建Web应用有三种方式:
1、继承AbstractAnnotationConfigDispatcherServletInitializer类;
2、利用java配置;
3、利用xml。
以下内容是基于第一种方式的处理。
1、配置DispatcherServlet
package com.giser.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 配置DispatcherServlet
*/
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
/**
* 将DispatcherServlet映射到/
*/
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
2、配置RootConfig
package com.giser.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages= {"com.giser.config"},
excludeFilters = {
@Filter(type=FilterType.ANNOTATION,
value=EnableWebMvc.class)
})
public class RootConfig {
}
3、配置WebConfig
package com.giser.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/**
* 启用SpringMVC
*/
@Configuration
@EnableWebMvc //启用SpringMVC
@ComponentScan("com.giser.config") //启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
/**
* 此方法要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,
* 而不是使用DispatcherServlet本身来处理此类请求
*/
configurer.enable();
}
}
4、测试
package com.giser.configtest;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;
import org.junit.Test;
import org.springframework.test.web.servlet.MockMvc;
import com.giser.config.web.HomeController;
public class HomeControllerTest {
@Test
public void testHomePage() throws Exception {
HomeController homeController = new HomeController();
/**
* 利用MockMvc进行测试
*/
MockMvc mockMvc = standaloneSetup(homeController).build();
mockMvc.perform(get("/")) // 请求
.andExpect(status().is2xxSuccessful()) // 返回状态
.andExpect(view().name("home")); // 结果
}
}