SpringMVC

SpringMVC

1.MVC

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范

MVC的主要作用是降低了视图与业务逻辑间的双向耦合,提高代码的复用性

MVC是一种架构模式

SpringMVC

2.MVC的作用

  • 将url映射到Java类或Java类的方法
  • 封装用户提交的数据
  • 处理请求-调用相关的业务处理-封装相应数据
  • 将响应的数据进行渲染

3.SpringMVC的作用

接收前端传递的数据,与用户进行交互

4.SpringMVC的特点

  • 高效,基于请求的MVC框架
  • 与Spring兼容性好,无缝衔接
  • 约定优于配置

5.工作原理

SpringMVC

1.用户发送请求至前端控制器DispatcherServlet

2.DispatcherServlet收到请求调用处理器映射器HandlerMapping

3.HandlerMing找到具体的处理器(根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet

4.DispatcherServlet调用HandlerMapping处理器映射器

5.HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)

6.Controller执行完成返回ModelAndView

7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9.ViewReslover解析后返回具体View

10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)

11.DispatcherServlet响应用户

6.SpringMVC调用流程图

SpringMVC

7.实例

7.1展示数据

get请求案例: http://localhost:8080/car/get

得到JSON数据:

{"id":718,"name":"保时捷","type":"Cayman T","color":"红色","price":641000.0}

思路:1)创建RunApp

2)创建Car封装id、name、type、color、price属性

3)创建CarController

  • RunApp

package cn.tedu;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.stereotype.Controller;

@SpringBootApplication

@Controller

public class RunApp {

    public static void main(String[] args) {SpringApplication.run(RunApp.class); }

}

  • Car

public class Car{封装属性,提供get/set方法、toString方法、构造方法}

  • CarController

package cn.tedu.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import cn.tedu.pojo.Car;

@RestController

@RequestMapping("/car")

public class CarController {

    @RequestMapping("/get")

    public Car get() {

       Car car = new Car();

       car.setId(718);

       car.setName("保时捷");

       car.setType("Cayman T");

       car.setColor("红色");

       car.setPrice(641000.0);

       return car;

    }

}

7.2处理请求参数

7.2.1简单参数传值

SpringMVC

前提: servlet 是一种参数传递的机制 要求:所有的参数类型都是String 数据类型
说明: 数据类型的转化是框架帮助完成的!!!
public xxxx getUser(String username,Integer age)

7.2.2对象的方式接收参数

SpringMVC

要求: 1.属性的名称必须与name属性名称一致.
2. 要求对象中必须有set/get方法 对象的属性都是private
public xxxx getUser(User user)

7.2.3同名提交问题

SpringMVC

说明: 有时页面中会出现同名的提交问题 name属性都是一致的. 问 SpringMVC如何接收
原理: 当页面进行同名提交. 会将参数使用","号进行拼接 hobby = 吃1,吃2,吃3 String数据类型
mvc参数接收:

        public xxxx getUser(String[] hobby){
            //hobby 按照,号拆分为数组  之后循环遍历 取值操作......
        }
        ...的本质 就是数组
        public xxxx getUser(String... hobby){
            //hobby 按照,号拆分为数组  之后循环遍历 取值操作......
        }            

7.2.4为对象的引用赋值   

原则: SpringMVC中页面的name属性名称 不能重复, 除非同名提交问题
实际需求: 使用对象的引用解决 实际需求中的同名提交问题

     <input  name="name" type="text" value="二郎神">  user(name) 二郎神,啸天
     <input  name="dog.name" type="text" value="啸天">     dog(name)  二郎神,啸天

 

        public class User{
            private String name;   //二郎神
            private Dog dog;       //dog对象
        }
        public class Dog{
            private String name;   //啸天
        }
        public xxxx getUser(User user){
            
        }    

7.2.5restFul风格

7.2.5.1

get请求案例: http://localhost:8080/getUser?id=100
restFul: 可以简化get请求的结构 简化key 使用/进行分隔,请求路径中不能有动词,要求restFul的请求是无状态的.
http://localhost:8080/user/100/tom
参数接收:

        @RequestMapping("/user/{id}/{name}")
        public xxx getUser(@Pathvariable Integer id,@Pathvariable String name){
        }
        //要求: {属性名称} 必须与对象的属性名称一致   get/set方法支持
        @RequestMapping("/getUser/{id}/{name}")
        public xxx getUser(User user){
        }

请求类型与业务逻辑的关系:
请求路径: http://localhost:8080/user/100/tom type=“put”
RestFul中要求: 通过请求的类型控制业务逻辑的执行.
1.Get 查询操作
2.Post 登录/注册时使用(增)
3.Put 修改操作
4.Delete 删除操作

        @GetMapping("/user/{id}/{name}")
        public xxx getUser(@Pathvariable Integer id,@Pathvariable String name){
        }
        
        @PutMapping("/user/{id}/{name}")
        public xxx getUser(User user){
        }

7.2.5.2什么是restFul?
1.restFul其实可以简化之前的get请求的类型,将参数使用/的方式进行分隔,减少了url参数的传递的字节信息
2.restFul规定,可以通过一个url请求的地址,通过不同的请求的类型,控制业务逻辑. restFul中 要求路径中不能出现动词

8.SpringMVC常用的注解

@Controller          标识是一个Controller,Spring包扫描创建实例

@RequestMapping      请求后的映射路径

@PathVariable        标识接收单个参数

@ResponseBody        返回对象利用jackson工具类转换为json字符串

@RequestParam        参数名和请求参数名称不同时使用,可以设置默认值

9.MVC与SSM的关系

SpringMVC
 

 

 

 

 

 

 

 

 

 

 

上一篇:SpringJava配置


下一篇:Spring学习笔记(一)。第一个spring程序HelloSpring。Spring概述,IOC实现分析。