完全注解开发
1、AbstractAnnotationConfigDispatcherServletlnitializer
在 Servlet3.0 环境中,容器会在类路径中查找实现javax.servlet.ServletContainerlnitializer接口的类,如果找到的话就用它来配置 Servlet 容器
Spring 提供了这个接口的实现,名为SpringServletContainerlnitializer,这个类反过来又会查找实现WebApplicationlnitializer的类并将配置的任务交给它们来完成
Spring3.2 引入了一个便利的 WebApplicationlnitializer基础实现,名为AbstractAnnotationConfigDispatcherServletlnitializer
当类扩展了AbstractAnnotationConfigDispatcherServletlnitializer并将其部署到 Servlet3.0 容器时,容器会自动发现它,并用它来配置Servlet 上下文
2、初始化类
/*** web工程的初始化类,代替web.xml*/public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定Spring配置类** @return*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}/*** 指定SpringMVC配置类** @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{WebConfig.class};}/*** 指定SpringMVC的映射规则,即url-pattern** @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 注册过滤器** @return*/@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();characterEncodingFilter.setEncoding("UTF-8");characterEncodingFilter.setForceResponseEncoding(true);HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};}}
3、SpringMVC 配置类
SpringMVC 配置类清单
- 1、扫描组件
- 2、视图解析器
- 3、view-controller
- 4、default-servlet-handler
- 5、MVC注解驱动
- 6、文件上传解析器
- 7、拦截器
- 8、异常处理解析器
// 标识为配置类@Configuration// ========== 1、扫描组件 ==========@ComponentScan("com.vectorx.springmvc.controller")// ========== 5、MVC注解驱动 ==========@EnableWebMvcpublic class WebConfig {}
4、视图解析器
@Configuration@ComponentScan("com.vectorx.springmvc.controller")@EnableWebMvcpublic class WebConfig {// ========== 2、视图解析器 ==========/*** 生成模板解析器** @return*/@Beanpublic ITemplateResolver templateResolver() {SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();templateResolver.setPrefix("/WEB-INF/templates/");templateResolver.setSuffix(".html");templateResolver.setTemplateMode(TemplateMode.HTML);templateResolver.setCharacterEncoding("UTF-8");return templateResolver;}/*** 生成模板引擎并注入模板解析器** @param templateResolver* @return*/@Beanpublic ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);return templateEngine;}/*** 生成视图解析器并注入模板引擎** @param templateEngine* @return*/@Beanpublic ViewResolver viewResolver(ISpringTemplateEngine templateEngine) {ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setOrder(1);viewResolver.setCharacterEncoding("UTF-8");viewResolver.setTemplateEngine(templateEngine);return viewResolver;}}
5、WebMvcConfigurer
@Configuration@ComponentScan("com.vectorx.springmvc.controller")@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer {// 略...// ========== 3、view-controller ==========@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("index");}// ========== 4、default-servlet-handler ==========@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}// ========== 7、拦截器 ==========@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");}// ========== 8、异常处理解析器 ==========@Overridepublic 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);}}
6、文件上传解析器
@Configuration@ComponentScan("com.vectorx.springmvc.controller")@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer {// 略...// ========== 6、文件上传解析器 ==========@Beanpublic MultipartResolver multipartResolver() {MultipartResolver multipartResolver = new CommonsMultipartResolver();return multipartResolver;}}
测试
访问首页

测试异常

附录:SpringMVC 配置类总览
// 标识为配置类@Configuration// ========== 1、扫描组件 ==========@ComponentScan("com.vectorx.springmvc.controller")// ========== 5、MVC注解驱动 ==========@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer {// ========== 2、视图解析器 ==========/*** 生成模板解析器** @return*/@Beanpublic ITemplateResolver templateResolver() {SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();templateResolver.setPrefix("/WEB-INF/templates/");templateResolver.setSuffix(".html");templateResolver.setTemplateMode(TemplateMode.HTML);templateResolver.setCharacterEncoding("UTF-8");return templateResolver;}/*** 生成模板引擎并注入模板解析器** @param templateResolver* @return*/@Beanpublic ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);return templateEngine;}/*** 生成视图解析器并注入模板引擎** @param templateEngine* @return*/@Beanpublic ViewResolver viewResolver(ISpringTemplateEngine templateEngine) {ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setOrder(1);viewResolver.setCharacterEncoding("UTF-8");viewResolver.setTemplateEngine(templateEngine);return viewResolver;}// ========== 3、view-controller ==========@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("index");}// ========== 4、default-servlet-handler ==========@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}// ========== 6、文件上传解析器 ==========@Beanpublic MultipartResolver multipartResolver() {MultipartResolver multipartResolver = new CommonsMultipartResolver();return multipartResolver;}// ========== 7、拦截器 ==========@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");}// ========== 8、异常处理解析器 ==========@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();Properties properties = new Properties();properties.setProperty(ArithmeticException.class.getCanonicalName(), "error");exceptionResolver.setExceptionMappings(properties);exceptionResolver.setExceptionAttribute("ex");resolvers.add(exceptionResolver);}}
总结
本届重点掌握
- web 工程初始化的配置方法
- SpringMVC 配置类的组件配置方法
附上导图,仅供参考

