ICode9

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

SpringMvc---全注解开发

2021-11-25 18:02:01  阅读:12  来源: 互联网

标签:return SpringMvc 配置 视图 --- 注解 new public


SpringMvc---全注解开发

使用配置类代替web.xml、SpringMvc.xml、Spring.xml。

首先

创建一个新的模块,引入依赖、规定打包方式war、创建webapp目录、WEB-INF目录。

然后

创建一个WebConfig类继承AbstractAnnotationConfigDispatcherServletInitializer类,实现里面的方法

在WebConfig中

//这个类的作用用来代替web.xml,继承AbstractAnnotationConfigDispatcherServletInitializer这个类。
//在web.xml文件中中完成的工作都在这个类中完成,配置字符编码过滤器、请求转换器、dispatcherServlet、声明SpringMvc配置类
public class TestWebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
​
​
    /**
     * 这个方法是用来返回Spring的配置类的class类型的数组,可以配置多个
     * @return 这个方法是用来返回Spring的配置类的class类型的数组,可以配置多个
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{
                TestSpringConfig.class
        };
    }
​
    /**
     * 这个方法是返回SpringMvc的配置类的class类型的数组
     * @return 这个方法是返回SpringMvc的配置类的class类型的数组
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{
                TestSpringMvcConfig.class
        };
    }
​
​
    /**
     *
     * @return 返回的是DispatchServlet的路径,就是管理请求的路径
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

在SpringMvcConfig中

使用注解@Configration声明一个类为配置类,并开启注解扫描设置扫描范围,建立controller、Interceptor、视图

在配置类中你要完成很多工作。所以在声明为配置类后,再实现接口WebMvcConfigurer。在接口中提供了很多方法实现对应的功能。

使用@EnableWebMvc注解就是开启mvc注解驱动

视图解析器---先创建一个返回值为 ITemplateResolver 的方法,在里面通过 ServletContextTemplateResolver 对视图前缀、后缀、编码格式、文本格式属性设置值,发现要一个WebApplicationContext 就新建一个,之后设置好值后,将对象返回。使用@Bean标签标识,把返回的对象装进IOC容器中。参照配置文件中的配置丛里往外看,这时需要一个SpringTemplateEngine返回值的方法,建立这个方法并使用@Bean标识,把刚才返回的bean对象作为形参注入进去,SpringMvc会根据类型自动装配,类型和刚才返回的对象的bean对象的类型不同就会说AutoWire没有找到对应的类型。根据配置文件中配置视图解析器的代码知道现在要给TemplateResolve属性赋值,创建SpringTemplateEngine对象,调用set方法。将形参bean作为TemplateResolve的值。最后再创建ViewResolver为返回值的方法并标识@Bean,将刚才返回值为SpringTemplateEngine的方法的返回bean对象作为形参,在方法内参照配置文件代码创建ThymeleafViewResolver对象,调用set方法设置值,返回ThymeleafViewResolver对象。

其他功能可以通过接口提供的方法实现对应的功能,底下都有。

/**
 * SpringMvc配置类中要完成的工作
 * 开启组件扫描、设置视图解析器、设置视图控制器、开启mvc注解驱动、注册文件上传服务需要的bean、
 * 设置响应报文的格式和字符编码、设置拦截器、注册异常处理的bean、开启静态资源访问
 */
@Configuration
@ComponentScan("xlw.com.last")
//这个注解能开启Mvc的注解驱动
@EnableWebMvc
public class TestSpringMvcConfig implements WebMvcConfigurer {
​
​
    /**
     * 配置响应报文的格式和字符编码
     * @param converters 将返回类型为StringHttpMessageConverter的方法的返回结果【处理响应输出输出的结果返回】放进
     *                   List<HttpMessageConverter<?>>集合中。
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter converter = new StringHttpMessageConverter();
        converters.add(converter());
    }
​
    /**
     * 对使用了@ResponseBody注解的返回结果进行处理
     * @return 响应处理结果
     */
    @Bean
    public StringHttpMessageConverter converter() {
//        首先创建StringHttpMessageConverter的对象,要用它来安排响应报文的格式和编码
        StringHttpMessageConverter converter = new StringHttpMessageConverter();
//        在调用set方法时发现,需要用到一个不为空的List<MediaType>类型的参数。创建它
//        在为list集合添加内容时,进入MediaType源码看,底下有有参构造方法还有静态代码块规定的常量。通过参数提示规定好响应的格式和编码格式
        List<MediaType> mediaTypeList = new ArrayList<MediaType>();
        MediaType mediaType = new MediaType(new MediaType(TEXT_HTML,Charset.forName("UTF-8")));
        mediaTypeList.add(mediaType);
        converter.setSupportedMediaTypes(mediaTypeList);
//        在这里设置默认的编码格式。
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        return converter;
    }
​
    /**
     * 开启静态资源访问
     *
     * @param configurer 设置默认servlet对静态资源处理
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
​
    /**
     * 设置拦截器
     *
     * @param registry 设置拦截器和拦截路径
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        FirstInterceptor interceptor = new FirstInterceptor();
//        将自己写好的interceptor对象添加进去并设置拦截路径
        registry.addInterceptor(interceptor).addPathPatterns("/**");
    }
​
    /**
     * 注册异常处理类的bean的代替工作
     *
     * @param resolvers 程序执行过程中可能出现的错误
     */
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
//        首先创建SimpleMappingExceptionResolver的对象,在创建properties对象
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();
        Properties prop = new Properties();
//        在SpringMvc配置文件中通过props标签中的prop标签对可能出现的异常进行属性注入,并规定异常的名字
        prop.setProperty("java.lang.ArithmeticException", "error");
//        然后将上面的prop注入给属性ExceptionMappings,在SpringMvc的配置文件中就是用property标签对这个属性进行注入
        simpleMappingExceptionResolver.setExceptionMappings(prop);
//        将错误放进请求域中
        simpleMappingExceptionResolver.setExceptionAttribute("ex");
    }
​
    /**
     * 配置视图控制器
     *
     * @param registry 视图的请求路径和视图名
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }
​
    /**
     * 配置视图解析器
     */
​
    //配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {
        WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
        ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver(webApplicationContext.getServletContext());
        servletContextTemplateResolver.setPrefix("/WEB-INF/templates/");
        servletContextTemplateResolver.setSuffix(".html");
        servletContextTemplateResolver.setTemplateMode("HTML5");
        servletContextTemplateResolver.setCharacterEncoding("UTF-8");
        return servletContextTemplateResolver;
    }
​
    //生成模板引擎并为模板引擎注入模板解析器
    @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,SpringMvc,配置,视图,---,注解,new,public
来源: https://blog.csdn.net/m0_55668855/article/details/121543808

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

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

ICode9版权所有