笔记来源:【尚硅谷】SpringMVC教程丨一套快速上手spring mvc

完全注解开发

1、AbstractAnnotationConfigDispatcherServletlnitializer

在 Servlet3.0 环境中,容器会在类路径中查找实现javax.servlet.ServletContainerlnitializer接口的类,如果找到的话就用它来配置 Servlet 容器

Spring 提供了这个接口的实现,名为SpringServletContainerlnitializer,这个类反过来又会查找实现WebApplicationlnitializer的类并将配置的任务交给它们来完成

Spring3.2 引入了一个便利的 WebApplicationlnitializer基础实现,名为AbstractAnnotationConfigDispatcherServletlnitializer

当类扩展了AbstractAnnotationConfigDispatcherServletlnitializer并将其部署到 Servlet3.0 容器时,容器会自动发现它,并用它来配置Servlet 上下文

2、初始化类

  1. /**
  2. * web工程的初始化类,代替web.xml
  3. */
  4. public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
  5. /**
  6. * 指定Spring配置类
  7. *
  8. * @return
  9. */
  10. @Override
  11. protected Class<?>[] getRootConfigClasses() {
  12. return new Class[]{SpringConfig.class};
  13. }
  14. /**
  15. * 指定SpringMVC配置类
  16. *
  17. * @return
  18. */
  19. @Override
  20. protected Class<?>[] getServletConfigClasses() {
  21. return new Class[]{WebConfig.class};
  22. }
  23. /**
  24. * 指定SpringMVC的映射规则,即url-pattern
  25. *
  26. * @return
  27. */
  28. @Override
  29. protected String[] getServletMappings() {
  30. return new String[]{"/"};
  31. }
  32. /**
  33. * 注册过滤器
  34. *
  35. * @return
  36. */
  37. @Override
  38. protected Filter[] getServletFilters() {
  39. CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
  40. characterEncodingFilter.setEncoding("UTF-8");
  41. characterEncodingFilter.setForceResponseEncoding(true);
  42. HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
  43. return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
  44. }
  45. }

3、SpringMVC 配置类

SpringMVC 配置类清单

  • 1、扫描组件
  • 2、视图解析器
  • 3、view-controller
  • 4、default-servlet-handler
  • 5、MVC注解驱动
  • 6、文件上传解析器
  • 7、拦截器
  • 8、异常处理解析器
  1. // 标识为配置类
  2. @Configuration
  3. // ========== 1、扫描组件 ==========
  4. @ComponentScan("com.vectorx.springmvc.controller")
  5. // ========== 5、MVC注解驱动 ==========
  6. @EnableWebMvc
  7. public class WebConfig {}

4、视图解析器

  1. @Configuration
  2. @ComponentScan("com.vectorx.springmvc.controller")
  3. @EnableWebMvc
  4. public class WebConfig {
  5. // ========== 2、视图解析器 ==========
  6. /**
  7. * 生成模板解析器
  8. *
  9. * @return
  10. */
  11. @Bean
  12. public ITemplateResolver templateResolver() {
  13. SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  14. templateResolver.setPrefix("/WEB-INF/templates/");
  15. templateResolver.setSuffix(".html");
  16. templateResolver.setTemplateMode(TemplateMode.HTML);
  17. templateResolver.setCharacterEncoding("UTF-8");
  18. return templateResolver;
  19. }
  20. /**
  21. * 生成模板引擎并注入模板解析器
  22. *
  23. * @param templateResolver
  24. * @return
  25. */
  26. @Bean
  27. public ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
  28. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  29. templateEngine.setTemplateResolver(templateResolver);
  30. return templateEngine;
  31. }
  32. /**
  33. * 生成视图解析器并注入模板引擎
  34. *
  35. * @param templateEngine
  36. * @return
  37. */
  38. @Bean
  39. public ViewResolver viewResolver(ISpringTemplateEngine templateEngine) {
  40. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  41. viewResolver.setOrder(1);
  42. viewResolver.setCharacterEncoding("UTF-8");
  43. viewResolver.setTemplateEngine(templateEngine);
  44. return viewResolver;
  45. }
  46. }

5、WebMvcConfigurer

  1. @Configuration
  2. @ComponentScan("com.vectorx.springmvc.controller")
  3. @EnableWebMvc
  4. public class WebConfig implements WebMvcConfigurer {
  5. // 略...
  6. // ========== 3、view-controller ==========
  7. @Override
  8. public void addViewControllers(ViewControllerRegistry registry) {
  9. registry.addViewController("/").setViewName("index");
  10. }
  11. // ========== 4、default-servlet-handler ==========
  12. @Override
  13. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  14. configurer.enable();
  15. }
  16. // ========== 7、拦截器 ==========
  17. @Override
  18. public void addInterceptors(InterceptorRegistry registry) {
  19. registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
  20. }
  21. // ========== 8、异常处理解析器 ==========
  22. @Override
  23. public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
  24. SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
  25. Properties properties = new Properties();
  26. properties.setProperty("java.lang.ArithmeticException", "error");
  27. exceptionResolver.setExceptionMappings(properties);
  28. exceptionResolver.setExceptionAttribute("ex");
  29. resolvers.add(exceptionResolver);
  30. }
  31. }

6、文件上传解析器

  1. @Configuration
  2. @ComponentScan("com.vectorx.springmvc.controller")
  3. @EnableWebMvc
  4. public class WebConfig implements WebMvcConfigurer {
  5. // 略...
  6. // ========== 6、文件上传解析器 ==========
  7. @Bean
  8. public MultipartResolver multipartResolver() {
  9. MultipartResolver multipartResolver = new CommonsMultipartResolver();
  10. return multipartResolver;
  11. }
  12. }

测试

访问首页

08-完全注解开发 - 图1

测试异常

08-完全注解开发 - 图2

附录:SpringMVC 配置类总览

  1. // 标识为配置类
  2. @Configuration
  3. // ========== 1、扫描组件 ==========
  4. @ComponentScan("com.vectorx.springmvc.controller")
  5. // ========== 5、MVC注解驱动 ==========
  6. @EnableWebMvc
  7. public class WebConfig implements WebMvcConfigurer {
  8. // ========== 2、视图解析器 ==========
  9. /**
  10. * 生成模板解析器
  11. *
  12. * @return
  13. */
  14. @Bean
  15. public ITemplateResolver templateResolver() {
  16. SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
  17. templateResolver.setPrefix("/WEB-INF/templates/");
  18. templateResolver.setSuffix(".html");
  19. templateResolver.setTemplateMode(TemplateMode.HTML);
  20. templateResolver.setCharacterEncoding("UTF-8");
  21. return templateResolver;
  22. }
  23. /**
  24. * 生成模板引擎并注入模板解析器
  25. *
  26. * @param templateResolver
  27. * @return
  28. */
  29. @Bean
  30. public ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
  31. SpringTemplateEngine templateEngine = new SpringTemplateEngine();
  32. templateEngine.setTemplateResolver(templateResolver);
  33. return templateEngine;
  34. }
  35. /**
  36. * 生成视图解析器并注入模板引擎
  37. *
  38. * @param templateEngine
  39. * @return
  40. */
  41. @Bean
  42. public ViewResolver viewResolver(ISpringTemplateEngine templateEngine) {
  43. ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
  44. viewResolver.setOrder(1);
  45. viewResolver.setCharacterEncoding("UTF-8");
  46. viewResolver.setTemplateEngine(templateEngine);
  47. return viewResolver;
  48. }
  49. // ========== 3、view-controller ==========
  50. @Override
  51. public void addViewControllers(ViewControllerRegistry registry) {
  52. registry.addViewController("/").setViewName("index");
  53. }
  54. // ========== 4、default-servlet-handler ==========
  55. @Override
  56. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  57. configurer.enable();
  58. }
  59. // ========== 6、文件上传解析器 ==========
  60. @Bean
  61. public MultipartResolver multipartResolver() {
  62. MultipartResolver multipartResolver = new CommonsMultipartResolver();
  63. return multipartResolver;
  64. }
  65. // ========== 7、拦截器 ==========
  66. @Override
  67. public void addInterceptors(InterceptorRegistry registry) {
  68. registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
  69. }
  70. // ========== 8、异常处理解析器 ==========
  71. @Override
  72. public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
  73. SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
  74. Properties properties = new Properties();
  75. properties.setProperty(ArithmeticException.class.getCanonicalName(), "error");
  76. exceptionResolver.setExceptionMappings(properties);
  77. exceptionResolver.setExceptionAttribute("ex");
  78. resolvers.add(exceptionResolver);
  79. }
  80. }

总结

本届重点掌握

  • web 工程初始化的配置方法
  • SpringMVC 配置类的组件配置方法

附上导图,仅供参考

08-完全注解开发 - 图3