十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! !

【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(上篇) , 万字解析, 建议收藏 ! ! ! 本篇会加入个人的所谓鱼式疯言鱼式疯言:此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.???可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 引言–_Spring MVC 犹如一座桥梁连接着前端的精彩与后端的强大它赋予开发者以灵动之笔在数字化的画布上描绘出绚丽多彩的 Web 世界。在 Spring MVC 的引领下我们能够驾驭复杂的业务逻辑实现流畅的用户体验让技术与创意完美融合开启无限可能的 Web 开发之旅。_目录–1. Spring MVC 2. Controller 的参数传递 3. Cookie 与 Session 传递 一. Spring MVC-------------### 1. Spring MVC 初识如上图 首先当用户发送一个HTTP 请求 是直接给 Controller 控制器 发送请求 然后当 Controller 控制器 接收到之后 就会把请求进一步传给Model 让Model来处理数据并返回结果给 Controller 。 最后Controller接收到Model 响应的数据之后 **不会直接返回给用户 而是传给 View ** 让View响应对应的文字和图片等数据的页面展示给用户 。如上图 上面的这样模型就称之为Spring MVC 模型Model 负责具体的 数据管理和业务逻辑的处理的一端Controller 负责接收来自用户的数据 并传递给Model 端进行处理 并 传递给View 端View 负责把最终的结果数据 通过页面展示的方式 响应给用户。### 鱼式疯言补充讲解找工作栗子上述的流程就好比我们应届生找工作的过程好比现在小编有一个内推名额 有了内推名额的话小编这边就可以直接进行面试也就是直接可以找Controller 端进行面试经过几波重重考验 小编通过了面试。 这时Controller就会告诉他的领导Model来同意是否任用小编 同意之后 领导Model 就会通知给 Controller.Controller然后又告诉HR 也就是这里的View 让View直接给小编发Offer### 2. Spring MVC 的优点Spring MVC的优点:低耦合性 使每个模块都相互独立 方便扩展更多的业务逻辑高效性 每个模块都独立工作 调用起来更方便并且还能相互配合处理大量的数据****集成性 与Spring 框架集成开发效率高 容易上手 可以动态的配置文件 充分利用Spring 的各种资源和特性。二. Controller 的参数传递-------------------Controller的参数传递 主要是演示代码 通过代码的方式来小伙伴初步的了解 Spring 框架 的使用 下面我们开始吧~### 1. 无参数 RestController RequestMapping(“/begin”) public class helloController { RequestMapping(“/hello”) public String hello() { return “I Love You”; } }在讲解参数之前 先带着小伙伴们回顾上一篇的内容RestController Controller 入口的标志RequestMapping:路径的声明 第一个为 父路径 /begin 第二个为 子路径 /hello所以最终的URL 为http://127.0.0.1:8080/begin/hello还不理解的小伙伴可以参考小编的前面一篇文章哦~Spring 入门操作详解### 鱼式疯言补充说明RequestMapping: 可以接收post 请求 也可以接收get 请求1.RequestMapping可以设置get请求 RequestMapping(value “/hello” ,method RequestMethod.GET) public String hello() { return “I Love You”; }post 请求: RequestMapping(value “/hello” ,method RequestMethod.POST) public String hello() { return “I Love You”; } 2. 或者可以换其他注解PostMapping: 只能接收post请求GetMapping: 只能接收get请求### 2. 单参数传递#### 1. 普通演示 RestController RequestMapping(“/begin”) public class helloController { /** * 传递时需要同名 * param name 名字 * return 该正文/ // 传递一个请求参数 RequestMapping(“/param1”) public String param1(String name) { return “name: name; } } 这里传递单个参数 是在URL的查询字符串进行拼接 小编这里使用postman进行发送get 请求, 当Controller接收到postman发送的这条 URL 请求 时 就会 效应对应的数据 。需要注意的是 这里的URL的参数名一定要 方法中的参数名 保持一致 。### 鱼式疯言补充说明 其实这里使用postman来 发送请求和使用浏览器发送请求的效果是一样的 没有本质区别。如果还不熟练使用postman的小伙伴也可以这样发送请求哦~#### 2. 重命名演示上面的单参数传递是不是要必须保证参数名是统一的 如果不统一会怎么样呢如上图如果参数不统一我们就无法传入对应参数。那么我们就无法换参数传递吗答案 不是我们还可以这样使用 RestController RequestMapping(”/begin) public class helloController { // 传递一个请求参数 RequestMapping(“/param1”) public String param1(RequestParam(“name1”) String name) { return “name: name; }如上图 我们可以使用RequestParam(name1)绑定参数 这里只需要RequestParam中的参数和URL中的查询字符串中的参数相同即可 而 方法中的参数我们只需要自己命名自己想要的都可以 。 但是有一点RequestParam(name1)是 必传参数 也就是说name1如果没传就会出现客户端的错误。### 鱼式疯言补充说明 RequestMapping(”/param1) public String param1(RequestParam(value “name1”, required false) String name) { return “name: name; } 如上面的代码 如果我们不需要是必传参数 就可以把required false即可### 3. 多参数传递 如果我们不止传一个参数呢 假如我们需要传nameagegender这三个参数 RestController RequestMapping(”/begin) public class helloController { // 传递多个请求参数 RequestMapping(“/param2”) public String param2(String name , int age , String gender) { return name: name “age: age “gender: gender; } 这里不需要考虑参数的顺序 只要对应着像 单参数一样同名称传递 就可以有效的传达到Controller 端。### 4. 对象传递小伙伴们有没有思考过 如果 参数很多 那么我们岂不是要一个一个传那样岂不是很麻烦。 所以我们就不妨就把这些参数都定义为类的一个一个属性 通过对象的方式 进行传递。#### 1. head 传递 RestController RequestMapping(”/begin”) public class helloController { /* * RequestBody 表示用来修饰对象传递一个 JSON 格式的对象的注解 * 传递一个 JSON 对象 * param student 对象 * return 返回该对象/ RequestMapping(“/param3·· ··”) public Student param3 (Student student) { return student; } } class Student { private String name; private int age; private String gender; public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender gender; } Override public String toString() { return “student{” “name” name ‘’’ “, age” age “, gender” gender ‘’’ ‘}’; } }如上图 对于Head的传递 传参时就在URL 的查询字符串中进行插入即可。#### 2. Body 传递 RestController RequestMapping(“/begin”) public class helloController { /* * * RequestBody 表示用来修饰对象传递一个 JSON 格式的对象的注解 * 传递一个 JSON 对象 * param student 对象 * return 返回该对象/ RequestMapping(“/param7”) public Student param7 (RequestBody Student student) { return student; } } class Student { private String name; private int age; private String gender; public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender gender; } Override public String toString() { return “student{” “name” name ‘’’ “, age” age “, gender” gender ‘’’ ‘}’; } }如上图 1. 我们把name,age,gender都定义为 对象的属性 于是就可以通过对象来传递。 2. 注意使用这个RequestBody标明是通过body报文来传递对象的。 3. 对于对象而言HTTP的报文格式是JSON格式的。### 鱼式疯言 *JSON就是一种有 特定数据的格式 : 相当于中文有中文的格式英文有英文的格式,对象就有JSON 的格式。故JSON 格式是针对 对象 而言的。 * 键值对 的格式{ Key1Value1 Key2Value2 Key3:Value3 }{}表示 一个对象 []表示 多个对象的集合添加了RequestBody的需要在Body, 未加就要使用Head传递。### 5. 数组传递 RestController RequestMapping(“/begin”) public class helloController { /** * 对数组进行传参/ RequestMapping(“/param6”) public List param6(String[] names) { return List.of(names); } }如上图 如果 参数都是相同类型 的话我们可以 像上方一样用数组传递数组传递的方式在查询字符串中使用数组名赋值 中间用 逗号分隔。### 6. 集合传递 /* * 传集合 list * 需要用 RequestParam 来绑定将数组转化 list * param list * return/ RestController RequestMapping(“/begin”) public class helloController { RequestMapping(“/param4”) // 传集合 public List param4(RequestParam List list) { return list; } } 这里 传参的方式和数组 一样小编在这里就不赘述了~三. Cookie 与 Session 传递----------------------### 1. Cookie 和 Session 的初识小伙伴可能有所不知的是对于HTTP 协议来说: 是无状态的协议无状态协议不会记录中间传入的数据 通信本身不维护和通信本身相关的任何状态信息 只是做 传输的作用 。当有重要的数据传入时 我们就需要使用一种属性来存储。 那么对于 客户端 来说存储数据的方式Cookie存储 由 服务器来提供 。 对于 服务器 来说存储数据的方式Session存储服务器自身来生成。 由服务器存储一份 客户端存储一份 从而保证数据的有效性 也能 提供校验 。关于更多Cookie和Session内容 小伙伴可以移步小编的下面这篇文章哦~Cookie 详解文章链接在Controller中 我们也提供了如何操作Cookie和Session的多种方式, 下面就让小编来演示一下吧~### 2. Cookie#### 1. 获取 Cookie 方式一 RequestMapping(“/entrance”) RestController public class header { // 获取多个Cookie /* * 通过 HttpServerletRequest 来获取整个 Http 的请求的 所有信息 * 获取到信息后再获取 Cookie * param quest 请求的信息 * return 返回 Cookie/ RequestMapping(“/getCookie”) public String getCookie(HttpServletRequest quest) { Cookie[] cookies quest.getCookies(); for (Cookie cookie: cookies) { System.out.println(cookie.getName() “:” cookie.getValue()); } return “获取Cookie 成功”; } }如上图 首先在postman中设置Cookie, 先在 上方指定IP 和 端口号 然后对应Cookie_数字来设置对应的Cookie 的信息。 其次在 Controller 端的代码下 我们使用HttpServletRequest类型来接收所以来自用户发送的请求。 接着利用这些请求 通过getCookie()提取出所以的Cookie数据 用一个 Cookie类型的数组 来存储。 最终打印Cookie 信息 并提示用户获取 Cookie 成功。#### 2. 获取 Cookie 方式二通过注解获取 import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.SessionAttribute; import java.util.Arrays; RequestMapping(“/entrance”) RestController public class header { /* * 使用 CookieValue 绑定 Cookie 的key的注解 * param name1 作为 key * return 返回 Cookie 的信息/ RequestMapping(“/getCookie1”) public String getCookie1(CookieValue(“Cookie_1”) Cookie name1) { System.out.println(name1.getName() : name1.getValue()); return name1.getName() : name1.getValue(); } }如上图1. 首先 在postman中设置Cookie2. 其次CookieValue 注解中标记 并且在参数中 指定是需要哪个Cookie 这时就可以获取到对应Cookie的全部信息 包括 Cookie 的名字 和 Cookie 的值3. 进行打印 Cookie 的name 和Cookie 的Value。这里唯一需要和小伙伴说明的是 在设置的Cookie中 必须含有CookieValue标明的那个Cookie 否则就会 报错 因为这是 必传参数。### 3. Session#### 1. 设置Session 方式 import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.SessionAttribute; RequestMapping(“/entrance”) RestController public class header { /* * 要先获取到 session 就需要先设置 session */ RequestMapping(“/setSession”) public String setSession(HttpServletRequest servletRequest) { HttpSession session servletRequest.getSession(); // 设置键值对 session.setAttribute(“hello”, 78); session.setAttribute(“cake”, “bbt”); session.setAttribute(“jat”, “good”); return “session 设置完毕”; } }如上图 在Controller中设置一些Session 这些Session就存储在 服务端 这边了当需要调用时 就可以随时调用了。 首先通过HttpServletRequest这个类型来获取请求的所有信息 其次 通过getSession()方法来获取 Session 对象。 然后 操作Session 对象通过setAttribute来插入 Session 的 Name 和 Value#### 2. 获取 Session 方式一 import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.SessionAttribute; RequestMapping(“/entrance”) RestController public class header { // 获取 session 数据方法一 使用 HttpServletRequest RequestMapping(“getSession1”) public String getSession1(HttpServletRequest servletRequest) { HttpSession session servletRequest.getSession(); return session.getAttribute(“hello”)null ? “未设置session 值” : String.valueOf(session.getAttribute(“hello”)); } }1. 首先还是先 设置Session2. 其次对应的通过HttpServletRequest来获取 Session对象 3. 最终 操作Session 对象 通过getAttribute 并加入对应的Session 的属性名来获取对应的 Session 的 Value 值。 #### 3. 获取 Session 方式二 import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.SessionAttribute; RequestMapping(“/entrance”) RestController public class header { // 获取session 数据方法二 使用 HttpSession RequestMapping(“getSession2”) public String getSession2(HttpSession session) { return session.getAttribute(“hello”)null ? “未设置session 值” : String.valueOf(session.getAttribute(“cake”)); } }如上图首先 设置Session 属性其次 通过HttpSession来直接获取Session 对象最后 通过getAttribute并加入对应Session的 属性名 来获取Value。### 鱼式疯言注意事项: 需要提醒小伙伴一点的是 获取的 Session 的Value 值是一个Object 的类型 所以如果要获取成String 类型的话就需要强转。#### 4. 获取 Session 方法三 import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.SessionAttribute; RequestMapping(“/entrance”) RestController public class header { // 获取session 数据方法三 利用 SessionAttribute 绑定 Session 注解 RequestMapping(“getSession3”) public String getSession3(SessionAttribute(“jat”) String jat) { return jat; } }如上图首先 设置Session 的属性 最后 通过SessionAttribute(jat)注解来返回内并加上对应的Session name 来获取。 需要注意的是 内必须是含有这个Session 名的否则### 鱼式疯言上面的 获取Session 和 Cookie 的方式多样 小伙伴根据自己的需求来获取哦~### 总结Spring MVC 了解了MVC的三种模型 Model Controller 以及 View 的分工不同 Model 主要处理数据 Controller 主要接管外来请求View 主要呈现给用户视图信息 为了更高效的实现网络的连接 。 * Controller 的参数传递 使用 Controller 来传递对应的参数 无参数的请求方式 单参数多参数 对象传递 数组传递 集合传递等… 小伙伴要注意对应的注解的使用方式哦~ *Cookie与Session传递理解Cookie和Session是对于Http 无状态协议的一种客户端服务器的记录数据的方式并且可以通过Controller的接口使用 多种方式来设置和访问对应的 Cookie 和Session 。 如果觉得小编写的还不错的咱可支持三连下 (定有回访哦) , 不妥当的咱请评论区指正 希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大动力?? ?? ??
返回列表