• 注解方式配置SpringMVC


    1. 初始化类,代替web.xml

    Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自动发现它,并用它来配置Servlet上下文。

    web.xml文件

    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
        
        <servlet>
            <servlet-name>springmvcservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc.xmlparam-value>
            init-param>
            <load-on-startup>1load-on-startup>
        servlet>
        <servlet-mapping>
            <servlet-name>springmvcservlet-name>
            <url-pattern>/url-pattern>
        servlet-mapping>
    
        
        <filter>
            <filter-name>CharacterEncodingFilterfilter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
            <init-param>
                <param-name>encodingparam-name>
                <param-value>UTF-8param-value>
            init-param>
            <init-param>
                <param-name>forceEncodingparam-name>
                <param-value>trueparam-value>
            init-param>
        filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
    
        
        <filter>
            <filter-name>HiddenHttpMethodFilterfilter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
        filter>
        <filter-mapping>
            <filter-name>HiddenHttpMethodFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
    
    web-app>
    
    • 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

    初始化类代替web.xml

    /**
     * 创建初始化类,代替web.xml
     */
    public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
        @Override
        // 指定Spring的配置类
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SpringConfig.class};
        }
    
        @Override
        // 加载SpringMVC的配置类
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{SpringMVCConfig.class};
        }
    
        @Override
        // 指定DispatcherServlet的映射规则,即url-pattern
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    
        @Override
        // 添加过滤器--> web.xml中一般存在两个编码顾虑去和put,post请求过滤器
        protected Filter[] getServletFilters() {
            CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
            characterEncodingFilter.setEncoding("UTF-8");
            characterEncodingFilter.setForceEncoding(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

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

    @Configuration表示该类为配置文件类

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

    3. 创建SpringMVCConfig配置类,代替SpringMVC.xml配置文件

    springmvc.xml配置文件内容:

    1. 扫描组件
    2. 文件上传解析器
    3. 视图解析器themeleaf
    4. 默认的servlet
    5. mvc的注解启动
    6. 视图控制器
    7. 拦截器(无)
    8. 异常解析器(无)
    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
           <context:component-scan base-package="com.lsm.controller">context:component-scan>
    
           
           <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
           bean>
    
            
            <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
                <property name="order" value="1"/>
                <property name="characterEncoding" value="UTF-8"/>
                <property name="templateEngine">
                    <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                        <property name="templateResolver">
                            <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                                
                                
                                <property name="prefix" value="/WEB-INF/templates/"/>
                                
                                <property name="suffix" value=".html"/>
                                <property name="templateMode" value="HTML5"/>
                                <property name="characterEncoding" value="UTF-8" />
                            bean>
                        property>
                    bean>
                property>
            bean>
    
           
           <mvc:annotation-driven />
           
           <mvc:default-servlet-handler/>
           <mvc:view-controller path="/" view-name="index" />
    
    beans>
    
    • 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

    创建SpringMVCConfig配置类,代替SpringMVC.xml配置文件,需要实现WebMvcConfigurer 接口

    /**
     * SpringMVC配置文件中可以配置的内容:
     * 1. 扫描组件---
     * 2. 文件上传解析器---
     * 3. 视图解析器themeleaf---
     * 4. 默认的servlet----
     * 5. mvc的注解启动---
     * 6. 视图控制器---
     * 7. 拦截器---
     * 8. 异常解析器
     */
    
    @Configuration
    @ComponentScan("qc.lsm.controller")  // 对应1: 扫描组件
    @EnableWebMvc  // 对应5: mvc的注解驱动
    public class SpringMVCConfig implements WebMvcConfigurer {
    
    
        @Override
        // 对应6: 视图控制器
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("index");
        }
    
        @Override
        // 对应4: 默认视图servlet
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
    
        @Bean
        // 对应2: 文件解析器
        public CommonsMultipartResolver getMultipartResolver(){
            return new CommonsMultipartResolver();
        }
    
        @Override
        // 对应7: 拦截器
        public void addInterceptors(InterceptorRegistry registry) {
            FirstInterceptor firstInterceptor = new FirstInterceptor();
            registry.addInterceptor(firstInterceptor);
        }
    
    
        // 对应3: 视图解析器
        // 配置生成模板解析器
        @Bean
        public ITemplateResolver templateResolver() {
            WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
            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;
        }
    
    }
    
    
    • 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

    4. 项目结构

    在这里插入图片描述

  • 相关阅读:
    sed & awk使用简介
    CE修改器学习历程之指针变量的保存
    TCP的管理机制(3)
    thonny运行esp32项目时出现以下情况
    使用手机通过Ip访问react项目 记录
    Python-VBA编程500例-033(入门级)
    WebDAV之葫芦儿·派盘 + ES文件浏览器
    软考中级系统集成项目管理工程师自学好不好过?
    【移远QuecPython】EC800M物联网开发板调用网络API(使用SIM卡联网并调用高德地图API的定位坐标转换)
    数据库日常操作
  • 原文地址:https://blog.csdn.net/qq_43751200/article/details/132754351