• 5.SpringMVC


    目录

    SpringMVC

    什么是SpringMVC

    MVC概念

    Spring MVC 创建和连接

    转发vs重定向

    获取参数

    1.基础数据类型/包装类型(无注解)

    添加@RequestParam注解

    2.自定义对象(无注解)

    3.form-data格式的文件上次

    4.使用自定义类型接收json数据=》@RequestBody注解

    5.获取URL中参数@PathVariable

    如果方法参数的变量名需要和关联的字段不一样=》@RequestParam

    6.获取 Request 和 Response 对象

    7.获取请求头,Session

    @RequestHeader:获取请求头某个字段的值

    @CookieValue:接收请求头Cookie中的某个字段的值

    返回响应

    1.返回网页

    2.返回text

    3.返回json

    组合注解:


    什么是SpringMVC

    1.Spring MVC 是一个 Web 框架。

    2.Spring MVC 是基于 Servlet API 构建的

    MVC概念

    MVC 是 Model View Controller 的缩写

     

    Controller:控制器,用于处理请求和响应

    Model:模型对象,对应请求数据和响应数据转换的对象

    View:视图,返回给前端使用的

    Spring MVC 创建和连接

    Spring MVC 项目创建和 Spring Boot 创建项目相同(Spring MVC 使用 Spring Boot 的方式创建),在创建的时候选择 Spring Web 就相

    当于创建了 Spring MVC 的项目。

    在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射。

    1. //表示当前类是web控制器,处理请求响应
    2. @Controller
    3. //类/方法注解:表示服务资源的信息(路径,请求方法等等)
    4. @RequestMapping("/user")
    5. public class UserController {
    6.   //返回值(字符串)是网页的路径,此时,会真正的返回对应网页的内容
    7.   @RequestMapping("/login")
    8.   public String login(){
    9.       return "/index.html";
    10.       //转发
    11. //       return "forward:/index.html";
    12.       //重定向
    13. //       return "redirect:/index.html";
    14.   }

    这样实现之后,当访问地址:http://localhost:8080/user/login 时就能访问index.html这个网页了。

    转发vs重定向

    转发:一次请求去,返回去其他路径的结果,路径不变。返回网页默认就是转发

    重定向:两次请求。第一次返回301/302/307重定向状态码+Location重定向的地址。第二次浏览器自动发送location路径的请求。路径改

    变其。

    获取参数

    1.基础数据类型/包装类型(无注解)

    1. @RequestMapping("/type1")
    2. public String 简单类型and没有注解(String username,String password,Integer age){
    3.   log.debug("username={}, password={}, age={}", username, password, age);
    4.   return "Done";
    5. }

    这样方法可以获取queryString,表单格式,from-data(不能是文件)。不可以获取json格式。

    若变量名与请求数据不一致或者没有,就接收到的是null。

    注意:如果是基础数据类型,请求数据就必须有这个字段。前端字段的类型,要和后端字段类型一致,否则也会报错

    添加@RequestParam注解

    =>使用在方法参数上。默认表示请求必须包含该字段

    2.自定义对象(无注解)

    方法同1.基础数据类型/包装类型

    3.form-data格式的文件上次

    1. //接收form-data上传的文件:请求是form-data格式,包含head字段的文件
    2. @RequestMapping("/upload")
    3. public String 对象(MultipartFile head){
    4.   log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
    5.   return "Done";
    6. }
    7. @RequestMapping("/upload2")
    8. public String 上传文件2(@RequestParam MultipartFile head){
    9.   log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
    10.   return "Done";
    11. }
    12. @RequestMapping("/upload3")
    13. public String 上传文件3(@RequestPart MultipartFile head){
    14.   log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
    15.   return "Done";
    16. }

    @RequestPart

    @RequestPart这个注解用在multipart/form-data表单提交请求的方法上。

    支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的

    @RequestParam

    @RequestParam支持’application/json’,也同样支持multipart/form-data请求

    4.使用自定义类型接收json数据=》@RequestBody注解

    1. //接收json格式的数据:@RequestBody
    2. @RequestMapping("/json")
    3. public String json(@RequestBody User user){
    4.   log.debug("user对象接收的数据:{}", user);
    5.   return "Done";
    6. }

    5.获取URL中参数@PathVariable

    如果方法参数的变量名需要和关联的字段不一样=》@RequestParam

    6.获取 Request 和 Response 对象

    1. @RequestMapping("/param10")
    2. public String param10(HttpServletResponse response, HttpServletRequest request) {
    3. String name = request.getParameter("name");
    4. //获取所有 cookie 信息
    5. Cookie[] cookies = request.getCookies();
    6. return name + " 你好.";
    7. }

    7.获取请求头,Session

    @RequestHeader:获取请求头某个字段的值

    1. @RequestMapping("/header")
    2. public String header(@RequestHeader("Accept-Encoding") String encoding){
    3.   log.debug("获取到的Header字段:{}", encoding);
    4.       return "Done";
    5. }

    @CookieValue:接收请求头Cookie中的某个字段的值

    @RequestMapping("/cookie")
    public String cookie(@CookieValue("yyy") String xxx){
        log.debug("获取到的Cookie字段:{}", xxx);
        return "孔子说:中午不睡觉,下午嗷嗷叫;孟子说:孔子说的对";
    }

    返回响应

    1.返回网页

    1. import com.example.demo.model.Person;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. @Controller
    5. @RequestMapping("/p")
    6. public class PersonController {
    7.    @RequestMapping("/index")
    8.    public Object index(){
    9.        // 执行业务...
    10.        // 返回view -> index.html
    11.        return "/index.html";
    12. }
    13. }

    2.返回text

    加@ResponseBody

    1. @RequestMapping("/m7")
    2. @ResponseBody
    3. public String method_7() {
    4.   return "Hello";
    5. }  

    3.返回json

    1.   //返回json字符串:@ResponseBody,且方法的返回值为List,Map,自定义类型即可
    2.   @RequestMapping("/response")
    3.   @ResponseBody
    4.   public Object response(){
    5.       Map map = new HashMap<>();
    6.       map.put("username", "张三");
    7.       map.put("nickname", "小张");
    8.       return map;
    9.   }
    10. }

    组合注解:

    @RestController:类注解,等同于@Controller+@ResponseBody

    @GetMapping:方法注解,等同于@RequestMapping(method=RequestMethod.GET)

    只提供get服务方法

    @PostMapping:方法注解,等同于@RequestMapping(method=RequestMethod.POST)

    只提供post服务方法

    补充:@RequestMapping提供所有的服务方法get,post,put等等

  • 相关阅读:
    流程中心系统版本对应问题解决
    动态规划求股票买入、卖出最大收益 java 实现( 最多可进行 1 次 “买入 ==> 卖出“ 操作 )
    Git学习笔记
    如何把视频压缩到最小?请看详细步骤
    java项目之固定资产管理系统(源码+文档)
    Monorepo[单一代码库] 与MicroService[微服务] 架构
    知网CN《知识文库》期刊简介及投稿邮箱
    五年后端开发,仅考这份面试题和答案,成功涨薪到30k!!!
    【解决】如何在JavaScript中终止forEach循环
    关于Docker compose值IP与域名的映射 之 extra_host
  • 原文地址:https://blog.csdn.net/qq_60991267/article/details/126060243