相关推荐recommended
SpringMVC之注解配置SpringMVC
作者:mmseoamin日期:2024-01-18

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:

想系统/深入学习某技术知识点…

一个人摸索学习很难坚持,想组团高效学习…

想写博客但无从下手,急需写作干货注入能量…

热爱写作,愿意让自己成为更好的人…

文章目录

  • 前言
  • 一、创建初始化类,代替web.xml
  • 二、创建SpringConfig配置类,代替spring的配置文件
  • 三、创建WebConfig配置类,代替SpringMVC的配置文件
  • 四、测试功能
  • 总结

    前言

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

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

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

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

    四、测试功能


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

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

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

    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 encodingFilter = new CharacterEncodingFilter();
            encodingFilter.setEncoding("UTF-8");
            encodingFilter.setForceRequestEncoding(true);
            HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
            return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
        }
    }
    

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

    @Configuration
    public class SpringConfig {
    	//ssm整合之后,spring的配置信息写在此类中
    }
    

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

    @Configuration
    //扫描组件
    @ComponentScan("com.gedeshidai.mvc.controller")
    //开启MVC注解驱动
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
        //使用默认的servlet处理静态资源
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
        //配置文件上传解析器
        @Bean
        public CommonsMultipartResolver multipartResolver(){
            return new CommonsMultipartResolver();
        }
        //配置拦截器
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            FirstInterceptor firstInterceptor = new FirstInterceptor();
            registry.addInterceptor(firstInterceptor).addPathPatterns("/**");
        }
        
        //配置视图控制
        
        /*@Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("index");
        }*/
        
        //配置异常映射
        /*@Override
        public void configureHandlerExceptionResolvers(List resolvers) {
            SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
            Properties prop = new Properties();
            prop.setProperty("java.lang.ArithmeticException", "error");
            //设置异常映射
            exceptionResolver.setExceptionMappings(prop);
            //设置共享异常信息的键
            exceptionResolver.setExceptionAttribute("ex");
            resolvers.add(exceptionResolver);
        }*/
        //配置生成模板解析器
        @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;
        }
    }
    

    四、测试功能

    @RequestMapping("/")
    public String index(){
        return "index";
    }
    

    总结

    以上就是SpringMVC之注解配置SpringMVC的相关知识点,希望对你有所帮助。

    积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!