• SpringMVC学习笔记(十三)—— 注解配置SpringMVC


    13、注解配置SpringMVC

    使用配置类和注解代替web.xmlSpringMVC配置文件的功能

    1、创建初始化类,代替web.xml

    Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类, 如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为 AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了 AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

    WebInit.java

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

    2、创建SpringConfig配置类,代替spring的配置文件

    SpringConfig.java

    @Configuration
    public class SpringConfig {
    }
    
    • 1
    • 2
    • 3

    3、创建WebConfig配置类,代替SpringMVC的配置文件

    WebConfig.java

    /**
     * 代替SpringMVC的配置文件:
     * 1.扫描组件  2.视图解析器  3.view-controller  4.default-servlet-handler
     * 5.mvc注解驱动  6.文件上传解析器  7.异常处理   8.拦截器
     */
    //将当前类标识为一个配置类
    @Configuration
    //1.扫描组件
    @ComponentScan("com.ssm.mvc.controller")
    //5.mvc注解驱动
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
    
        //4.default-servlet-handler
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
    
        //8.拦截器
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            TestInterceptor testInterceptor = new TestInterceptor();
            registry.addInterceptor(testInterceptor).addPathPatterns("/**");
        }
    
        //3.view-controller
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/hello").setViewName("hello");
        }
    
        //6.文件上传解析器
        @Bean
        public MultipartResolver multipartResolver() {
            CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
            return commonsMultipartResolver;
        }
    
        //7.异常处理
        @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("exception");
            resolvers.add(exceptionResolver);
        }
    
        //2.视图解析器
        //2-1.配置生成模板解析器
        @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;
        }
    
        //2-2.生成模板引擎并为模板引擎引入模板解析器
        @Bean
        public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
            SpringTemplateEngine templateEngine = new SpringTemplateEngine();
            templateEngine.setTemplateResolver(templateResolver);
            return templateEngine;
        }
    
        //2-3.生成视图解析器并为解析器注入模板引擎
        @Bean
        public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
            ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
            viewResolver.setCharacterEncoding("UTF-8");
            viewResolver.setTemplateEngine(templateEngine);
            return viewResolver;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    4、测试功能——访问首页

    @Controller
    public class TestController {
        @RequestMapping("/")
        public String index() {
            return "index";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

  • 相关阅读:
    Android HAL机制的深入理解及在Linux上移植和运行的一个好玩的HAL小例子
    shell编程流程控制语句case和select
    uview的input框,clear没反应的问题
    【1024程序员节特刊】算法题目易错之处干货总结
    背包问题
    第四章 神经网络的学习——数据&损失函数&数值微分&神经网络的梯度&学习算法的实现
    100天精通Oracle-实战系列(第21天)Oracle 数据泵常用参数和命令
    专本贯通 转段考试pta C语言
    [激光原理与应用-39]:《光电检测技术-6》- 光干涉的原理与基础
    OAK相机:启动报错X_LINK_DEVICE_NOT_FOUND
  • 原文地址:https://blog.csdn.net/kuaixiao0217/article/details/125603461