ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【SpringMVC 框架(自学)】Day11(注解配置SpringMVC)--2022/4/23

2022-04-24 12:34:56  阅读:154  来源: 互联网

标签:解析器 return 23 SpringMVC 配置 -- new public


十一、注解配置SpringMVC

Servlet3.0的环境中容器在类路径中查找实现javax.servlet.ServletContainerInitializer接口

如果找到的话,就会用它去配置Servlet容器

Spring提供了这个接口的实现,名为SpringServletContainerInitializer

这个类又会查找实现WebApplicationInitializer并将配置的任务交给它们完成


Spring3.2的环境中WebApplicationInitializer有一个的实现类

其名为:AbstractAnnotationConfigDispatcherServletInitializer

只要将其部署,那么Spring容器会自动发现,并用它来配置Servlet上下文


1 、创建初始化类(Web.xml)

首先创建一个类,实现初始化的功能,代替Web.xml,

继承AbstractAnnotationConfigDispatcherServletInitializer

实现它的四个方法:

  • getRootConfigClasses():指定Spring的配置类
  • getServletConfigClasses():指定SpringMVC的配置类
  • getServletMappings():指定DispathcerServlet的映射规则
  • getServletFilters():注册过滤器
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer{
    //继承这个实现类,并实现它所存在的方法
    
    /**
     * 指定Spring的配置类
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    /**
     * 指定SpringMVC的配置类
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    /**
     * 指定DispathcerServlet的映射规则,即Url-pattern
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    
    //接着实现过滤器(getServletFilters)方法

    /**
     * 注册过滤器
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        //设置Get、Post的字符集
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceResponseEncoding(true);
        //设置Put、Delete、Update等字符集
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};
    }
}

2 、创建SpringConfig类(Spring.xml)

@Configuration
public class SpringConfig {
    //因为是配置类:所以要用Configuration标识
    //还未整合到Spring 所以暂且不用配置
}

3 、 创建WebConfig类(SpringMVC.xml)

在SpringMVC的配置中,需要配置以下文件:

  • 1 、组件扫描器(Compnent-Scan)
  • 2 、Thymeleaf视图解析器
  • 3 、MVC视图解析器(View-Controller)
  • 4 、 静态资源访问(Default-servlet-handler)
  • 5 、MVC注解驱动(annotation-driver)
  • 6 、文件上传解析器(CommonsMultiPartResolver)
  • 7 、异常处理器(SimpleMappingExceptionResolver)
  • 8 、拦截器(InterCeptor)
@Configuration//将当前类标识为配置类
@ComponentScan// 1 、组件扫描器
@EnableWebMvc// 5 、MVC注解驱动
public class implements WebMvcConfigurer{
    
    // 4 、配置静态资源访问 Ctrl+o,选择configureDefaultServletHandling
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        //enable开启静态资源访问
        configurer.enable();
    }
    
    // 8 、配置拦截器 Ctrl+o,选择addInterCeptor
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //new一个拦截器对象
        TestInterceptor testInterceptor = new TestInterceptor();
        //添加拦截器类().添加拦截的路径()
        //addInterceptor(HandlerInterceptor interceptor)类型是拦截器
        //所以需要new一个拦截器对象
        registry.addInterceptor(testInterceptor).addPathPatterns("/**");
    }
    
    // 3 、配置mvc视图解析器 Ctrl+o,选择addViewControllers
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //添加路径("/hello").设置跳转的视图名("hello")
        registry.addViewController("/hello").setViewName("hello");
    }
    
    // 6 、配置文件上传解析器 Ctrl+o,选择MultipartResolver
    @Bean //要创建一个对象 用@Bean注解
    public MultipartResolver multipartResolver(){
        //MultipartResolver只是一个接口 所以要new它的实现类
        CommonsMultipartResolver commonsMultipartResolver 
            									= new CommonsMultipartResolver();
        return commonsMultipartResolver;
    }
    
    //另一种写法
//    @Bean
//    public CommonsMultipartResolver multipartResolver(){
//        return new CommonsMultipartResolver();
//    }
    
    // 7 、配置异常处理器 Ctrl+o,选择configureHandlerExceptionResolvers
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        //配置bean
        SimpleMappingExceptionResolver exceptionResolver 
            							= new SimpleMappingExceptionResolver();
        //创建两个属性exceptionMapping、exceptionAttribute;
        //new一个property文件,进行键值对的传参
        Properties prop = new Properties();
        //传入异常,因为键值对是String类型,所以不能用put方法(Object key,Object Value)
        prop.setProperty("java.lang.ArithmeticException","error");
        //将prop属性传给异常映射
        exceptionResolver.setExceptionMappings(prop);
        //将异常信息在请求域中进行共享
        exceptionResolver.setExceptionAttribute("exception");
        //添加异常处理器
        resolvers.add(exceptionResolver);
    }
    
    /**
    *  2 、配置Thymeleaf解析器
    */
    //配置生成模板解析器
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver springResourceTemplateResolver = new SpringResourceTemplateResolver();
        springResourceTemplateResolver.setApplicationContext(ContextLoader.getCurrentWebApplicationContext());
        springResourceTemplateResolver.setPrefix("/WEB-INF/templates/");
        springResourceTemplateResolver.setSuffix(".html");
        springResourceTemplateResolver.setCharacterEncoding("UTF-8");
        springResourceTemplateResolver.setTemplateMode(TemplateMode.HTML);
        return springResourceTemplateResolver;
    }

    //生成模板引擎并为模板引擎注入模板解析器
    @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;
    }
}

标签:解析器,return,23,SpringMVC,配置,--,new,public
来源: https://www.cnblogs.com/coldheartsgoinbroke/p/16185243.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有