欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > spring MVC

spring MVC

2024/10/25 1:33:42 来源:https://blog.csdn.net/weixin_43497876/article/details/139524926  浏览:    关键词:spring MVC

什么是 spring MVC

1. Spring MVC 是⼀个 Web 框架。
2. Spring MVC 是基于 Servlet API 构建的。

什么是 MVC

        MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。

● Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
● View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。(这个基本没有了,前后端分离了)
● Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,控制⽤户输⼊,并向模型发送数据。

MVC 和 Spring MVC 的关系

        MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。 即 Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web 框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spring MVC 项目就可以感知到⽤户的请求。
        绝大部分的 Java 项⽬都是基于 Spring(或 Spring Boot)的,而 Spring 的核心就是 Spring MVC。 创建的所有  Spring、Spring Boot 项⽬基本都是基于 Spring MVC 的。

Spring MVC 的三个步骤

Spring MVC 创建和连接

        Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同(Spring MVC 使⽤ Spring Boot 的方式创建), 在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬。

创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通:
package com.example.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;@Controller
@ResponseBody  // 这个注解意思:返回的结果是数据而不是页面(前后端分离)
public class UserController {@RequestMapping("/say")  // 默认支持所有类型的请求
//    @RequestMapping(value = "/say", method = RequestMethod.POST)  // 默认情况下是所有请求都可以接收,如果想只接收 post,就再设置一个 method 方法public String say() {return "hello, MVC";}@PostMapping("/sayPost") // 或者使用这个注解public String sayPost() {return "hello, MVC, sayPost";}@GetMapping("/satGet") // 这个注解只能接收 get 请求public String satGet() {return "hello, MVC, satGet";}
}

@RequestMapping 注解介绍

        @RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的。( 路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类 的某个方法的过程

        @RequestMapping 即可修饰类,也可以修饰⽅法。当修饰类的时候也修饰方法时,访问的地址是类 + 方法。

获取参数

单个参数

直接设置方法的形参来进行接收(key 要对应)

多个参数

1. 设置多个参数来进行接收

2. 构造一个对象来接收(前端传递一个表单 / 一个对象)

3. 传过来的是一个 json 数据,使用 @RequestBody

对所传参数进行改名

但是前端如果没有传递 name 的时候就会报错:

因此需要在 value 后面加上 required = false:

URL 中的参数

使用 @PathVariable:

上传文件

使用 @RequestPart:

获取Cookie / header / Session

获取Cookie,使用 @CookieValue

获取 header,使用 @RequestHeader

获取 Session,使用 @SessionAttribute

在获取 Session 之前,得现有 Session,这里我在代码里面先简单弄个 Session:

@RequestMapping("/setSession")public String setSession(HttpServletRequest request) {HttpSession session = request.getSession(); // 默认是 true,没有 session 的话就创建一个session.setAttribute("name", "姜维");return "session 存储成功";}

返回数据

返回静态页面(默认,没加 @ResponseBody

返回静态页面(加上 @ResponseBody

请求转发 / 请求重定向

请求转发 — forward(授人以鱼)

        请求转发就像女朋友叫你买杯奶茶,然后你自己就去帮她买了。

请求重定向 — redirect(授人以渔)

        请求转发就像女朋友叫你买杯奶茶,然后你把钱转给女朋友让她自己去买。

两者区别
1. 定义不同

        请求转发(Forward):发生在服务端程序内部,当服务器端收到一个客户端的请求之后,会先将请求,转发给目标地址,再将目标地址返回的结果转发给客户端。

        请求重定向(Redirect):请求重定向指的是服务器端接收到客户端的请求之后,会给客户端返回了一个临时响应头,这个临时响应头中记录了,客户端需要再次发送请求(重定向)的 URL 地址,客户端再收到了地址之后,会将请求发送到新的地址上,这就是请求重定向。

2. 请求方不同

        请求转发是服务器端的行为

        请求重定向是客户端的行为

3. 数据共享不同

        请求转发是服务器端实现的,所以整个执行流程中,客户端(浏览器端)只需要发送一次请求,因此整个交互过程中使用的都是同一个 Request 请求对象和一个 Response 响应对象,所以整个请求过程中,请求和返回的数据是共享的;而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的。

4. url 地址不同
5. 代码不同
小结

        “字越少,事越大” 。就像上面的请求转发,如果今天女朋友突然不想加冰了不想吃珍珠想吃椰果了那不就得挨顿骂了嘛。如果是上面的请求重定向,然后女朋友就算突然改口味那也没事,因为不会买到自己不喜欢的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com