• Spring MVC


    参考资料

    https://www.bilibili.com/video/BV1Fi4y1S7ix?p=43&vd_source=c581024b8cd9585ec6a75c56ac05571a

    1. SpringMVC 简介

    • SpringMVC技术与Servlet技术功能等同,均属于web层开发技术。

    • SpringMVC 是一种基于Java实现MVC模型的轻量级Web框架。

    • SpringMVC 是一种表现层框架技术。

    • 优点:使用简单,开发便捷,灵活性强。

    2. SpringMVC 入门案例

    1. 导入SpringMVC依赖和Servlet依赖
    <dependencies>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>5.3.21version>
        dependency>
        
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
            <version>4.0.1version>
            <scope>providedscope>
        dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. 创建SpringMVC控制器类(相当于Servlet类)
    @RestController
    //@RestController = @ResponseBody + @Controller
    //@Controller 将类注册到Spring容器
    //@ResponseBody 将方法返回值作为响应体,不加则是跳转的页面
    public class UserController {
    
        @RequestMapping("/save") //设置请求路径
        public String save() {
            return "save";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 创建SpringMVC的配置类,设置ComponentScan路径
    @Configuration
    @ComponentScan({"com.xin.web"})
    public class SpringMVCConfig {
        public static void main(String[] args) {
            AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 初始化Servle容器,加载SpringMVC环境配置,并设置SpringMVC处理的请求路径
    public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    	//加载Spring Web容器配置
        @Override
        protected WebApplicationContext createServletApplicationContext() {
        	//创建一个Spring Web容器
            AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
            //加载配置
            context.register(SpringMVCConfig.class);
            return context;
        }
    
        @Override
        protected String[] getServletMappings() {
        	//设置交给SpringMVC处理的请求路径。"/"所有请求
            return new String[]{"/"};
        }
    	
    	//加载Spring容器配置。
        @Override
        protected WebApplicationContext createRootApplicationContext() {
            return null;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    1. 部署到tomcat ,访问路径 localhost/save
      在这里插入图片描述

    3. 初始化Servle容器,加载SpringMVC容器配置,并设置SpringMVC处理的请求路径

    方式一 继承AbstractDispatcherServletInitializer

    public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    
        @Override
        protected WebApplicationContext createServletApplicationContext() {
            //创建SpringMVC容器
            AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
            //加载配置
            context.register(SpringMVCConfig.class);
            return context;
        }
    
        @Override
        protected String[] getServletMappings() {
            //设置“/” 所有请求路径都交给SpringMVC控制器处理。
            return new String[]{"/"};
        }
    
        @Override
        protected WebApplicationContext createRootApplicationContext() {
            //创建Spring容器
            AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
            //加载配置
            context.register(SpringConfig.class);
            return context;
        }
    }
    
    • 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

    方式二 继承AbstractAnnotationConfigDispatcherServletInitializer

    public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SpringConfig.class};
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{SpringMVCConfig.class};
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4. 入门案例工作流程分析

    在这里插入图片描述

    5. SpringMVC加载的Controller和Spring加载的Bean分开

    在这里插入图片描述

    @Configuration
    @ComponentScan(value = {"com.xin.web"},
            excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class))
    public class SpringConfig {
        public static void main(String[] args) {
            //验证下是否排除了@Controller注解下的Bean
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
            UserController userController = context.getBean(UserController.class);
            System.out.println(userController);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6. 给Web容器添加过滤器并制定字符集

    public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
        @Override
        protected Filter[] getServletFilters() {
            //设置字符过滤,处理中文乱码
            CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
            characterEncodingFilter.setEncoding("UTF-8");
            return new Filter[]{characterEncodingFilter};
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7. 接收请求参数

    1. 普通参数

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    2. POJO对象

    在这里插入图片描述

    3. 嵌套的POJO

    在这里插入图片描述

    4. 数组

    在这里插入图片描述

    5. 集合

    在这里插入图片描述

    8. 接收请求参数 JSON格式

    1. 导入转json的依赖
            
            <dependency>
                <groupId>com.fasterxml.jackson.coregroupId>
                <artifactId>jackson-databindartifactId>
                <version>2.13.3version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 开启注解
    @ComponentScan({"com.xin.web.controller"})
    @EnableWebMvc //开启json数据转换为对象
    public class SpringMVCConfig {
    }
    
    • 1
    • 2
    • 3
    • 4
    1. 形参上加@RequestBody注解,参数从请求体中获取
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/save") //设置请求路径
        public String save(@RequestBody User user) {
            System.out.println(user);
            return user.toString();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 测试
      在这里插入图片描述

    9. 请求参数 日期类型

    在这里插入图片描述
    在这里插入图片描述

    10. 响应页面

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/save")
        public String save() {
            //响应到页面
            return "/index.jsp"; //页面路径
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    11. 响应数据

    1. 响应字符串

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/save")
        @ResponseBody
        public String save() {
            //响应文本数据
            return "save";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. 响应json数据

    @Controller
    @RequestMapping("/user")
    public class UserController {
    
        @RequestMapping("/save")
        @ResponseBody
        public User save() {
            User user = new User();
            return user; //jackson帮我们将对象转为json格式的数据了。
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    12. REST 风格

    在这里插入图片描述

    13. 放行静态资源

    public class SpringMVCSupport extends WebMvcConfigurationSupport {
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            //放行静态资源,不由SpringMVC控制器管理
            registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
            registry.addResourceHandler("/html/**").addResourceLocations("/html/");
            registry.addResourceHandler("/css/**").addResourceLocations("/css/");
            registry.addResourceHandler("/js/**").addResourceLocations("/js/");
            registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    @Configuration
    @ComponentScan(basePackages = {"com.xin.web.controller"})
    @Import(SpringMVCSupport.class) //将SpringMVCSupport对象添加到SpringMVC容器。
    @EnableWebMvc //开启json数据转换为
    public class SpringMVCConfig {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Redis 学习笔记2
    VR数字政务为我们带来了哪些便捷之处?
    Spring Boot 依赖注入实现原理
    Uniapp 跨页面传复杂参、传对象
    WSL中ubuntu安装mysql数据库
    ssm+vue+elementUI基于微信小程序的电动电动汽车车智能充电桩服务平台-计算机毕业设计
    深入理解 Python 中的 zip 函数
    洛谷刷题入门篇:顺序结构
    基于LVM和NFS的cinder多后端
    PYTHON第二次
  • 原文地址:https://blog.csdn.net/ZHHX666/article/details/125858639