1. Annotate configuration SpringMVC
The purpose is to use configuration classes and annotations to replace the functions of web.xml and Spring.MVC configuration files
1. Create an initialization class instead of web.xml
- In the Servlet3.0 environment, the container will look for a class that implements the javax.servlet.ServletContainerInitializer interface in the class path, and if found, use it to configure the Servlet container.
- Spring provides an implementation of this interface, named SpringServletContainerInitializer, which in turn looks for classes that implement WebApplicationInitializer and delegates the configuration tasks to them.
- Spring 3.2 introduces a convenient basic implementation of WebApplicationInitializer named AbstractAnnotationConfigDispatcherServletInitializer. When our class extends AbstractAnnotationConfigDispatcherServletInitializer and deploys it to a Servlet3.0 container, the container will automatically discover it and use it to configure the Servlet context.
①Create a Module and configure pom.xml
② Create webapp and WEB-INF folders
③Create a configuration class
2. Create a WebInit class instead of web.xml and inherit AbstractAnnotationConfigDispatcherServletInitializer
①WebInit
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 指定spring的配置类
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
/**
* 指定springMVC的配置类
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
/**
* 指定DispatcherServlet的映射规则。即url-pattern
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 添加过滤器
*/
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
encodingFilter.setForceRequestEncoding(true);
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
}
}
② Create SpringConfig and WebConfig configuration classes
@Configuration
public class SpringConfig {
}
@Configuration
public class WebConfig {
}
3. WebConfig instead of SpringMVC configuration file
- Scan component, view resolver, view-controller, default-servlet-handler
- Mvc annotation driver, file upload parser, exception handling, interceptor
configuration template
//当前类标识一个配置类
@Configuration
// 开启扫描组件
@ComponentScan ("com.wzl.mvc.controller")
//开启MVC注解驱动
@EnableWebMvc
public class WebConfig {
//配置生成模板解析器
@Bean
public ITemplateResolver templateResolver() {
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
// ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过WebApplicationContext 的方法获得
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(
webApplicationContext.getServletContext());
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setTemplateMode(TemplateMode.HTML);
return templateResolver;
}
//生成模板引擎并为模板引擎注入模板解析器
@Bean
public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
//生成视图解析器并未解析器注入模板引擎
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
}
②Test Controller controller
//Visit the home page
@Controller
public class TestController {
@RequestMapping("/")
public String index(){
return "index";
}
}
4. Configure others and realize other configurations.
Implements the interface implements WebMvcConfigurer
public class WebConfig implements WebMvcConfigurer{
}
Configure default servlet available, default-servlet-handler
Ctrl+o to find
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
Configure interceptors
① Create an interceptor
public class TestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
②In WebConfig
@Override
public void addInterceptors(InterceptorRegistry registry) {
TestInterceptor testInterceptor = new TestInterceptor();
// 添加拦截路径
registry.addInterceptor(testInterceptor).addPathPatterns("/admin/**");
}
③ Add in the controller
@RequestMapping("/admin/index")
public String index1(){
return "index";
}
④ test
Configure view-controller
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
jump to main page
Configuration file upload
//文件上传解析器
@Bean
public MultipartResolver multipartResolver(){
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
return commonsMultipartResolver;
}
Configure exception parser
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
properties.setProperty("java.lang.ArithmeticException","error");
//设置异常映射
exceptionResolver.setExceptionMappings(properties);
exceptionResolver.setExceptionAttribute("ex");
resolvers.add(exceptionResolver);
}