SpringMVC基础篇(二)

news/2024/5/18 15:57:55

文章目录

    • 1.Postman
        • 1.基本介绍
          • Postman是什么?
        • 2.Postman快速入门
          • 1.Postman下载
            • 点击安装自动安装在系统盘
          • 2.基本操作
            • 1.修改字体大小
            • 2.ctrl + “+” 放大页面
            • 3.进入创建请求界面
          • 2.需求分析
          • 3.具体操作
          • 4.保存请求到文件夹中
            • 1.点击保存
            • 2.创建新的文件夹
            • 3.保存成功
        • 3.使用Postman完成对前面编写的UserHander方法的请求
          • 1.分析
          • 2.发送请求
        • 4. 对search方法进行请求(带参数)
          • 1.分析
          • 2.发送请求
        • 5.对im方法发送请求(ant)
          • 1.分析
          • 2.发送请求
        • 6.对register方法发送请求(路径参数)
          • 1.分析
          • 2.发送请求
        • 7.对hello方法发送请求(带参数)
          • 发送请求
        • 8.Postman发送json数据(需要修改请求头)
    • 2.Rest(优雅的url请求风格)
        • 1.基本介绍
        • 2.Rest风格的url案例(crud)
          • 1.需求分析
          • 2.环境配置(在上一篇的环境基础)
            • 1.配置web.xml
            • 2.配置springDispatcherServlet-servlet.xml
          • 3.前端样式模板rest.jsp
          • 4.GET
            • 1.BookHandler.java
            • 2.rest.jsp
            • 3.结果展示
          • 5.POST
            • 1.BookHandler.java
            • 2.rest.jsp
            • 3.结果展示
          • 6.DELETE(重点看)
            • 1.rest.jsp
            • 2.BookHandler.java
            • 3.结果展示
          • 7.PUT
            • 1.rest.jsp
            • 2.BookHandler.java
            • 3.结果展示
          • 8.HiddenHttpMethodFilter源码解析(debug)
            • 1.下断点
            • 2.点击修改书籍
            • 3.下一步,发现了请求是POST
            • 4.下一步,发现参数_method的值为PUT
            • 5.下一步,将这个值转换成大写(意味着,在填值的时候,不区分大小写)
            • 6.下一步,判断取得的值PUT是不是在集合中
            • 7.下两步,将请求转换成PUT类型使得SpringMVC框架可以识别
          • 9.Rest的DELETE和PUT总结

1.Postman

1.基本介绍
Postman是什么?

image-20240224153523195

2.Postman快速入门
1.Postman下载
点击安装自动安装在系统盘

image-20240224154311749

2.基本操作
1.修改字体大小

image-20240224154612019

2.ctrl + “+” 放大页面
3.进入创建请求界面

image-20240224154911197

image-20240224154939875

2.需求分析

image-20240224154158378

3.具体操作

image-20240224155133759

4.保存请求到文件夹中
1.点击保存

image-20240224155227617

2.创建新的文件夹

image-20240224155424743

3.保存成功

image-20240224155450256

3.使用Postman完成对前面编写的UserHander方法的请求

image-20240224161139293

1.分析

image-20240224161201226

2.发送请求

image-20240224161249104

4. 对search方法进行请求(带参数)

image-20240224161519287

1.分析

image-20240224161843531

2.发送请求

image-20240224161936610

5.对im方法发送请求(ant)

image-20240224162106552

1.分析

image-20240224162643205

2.发送请求

image-20240224162708478

6.对register方法发送请求(路径参数)

image-20240224162819570

1.分析

image-20240224163022132

2.发送请求

image-20240224163002537

image-20240224163009484

7.对hello方法发送请求(带参数)

image-20240224163218681

发送请求

image-20240224163126470

8.Postman发送json数据(需要修改请求头)

image-20240224163807285

image-20240224163935801

2.Rest(优雅的url请求风格)

1.基本介绍

image-20240224165046213

image-20240224165100487

2.Rest风格的url案例(crud)
1.需求分析

image-20240224165606849

2.环境配置(在上一篇的环境基础)
1.配置web.xml
    <!--配置HiddenHttpMethodFilter--><!--把post方式提交的delete和put请求进行转换--><filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><!--所有请求都经过这个过滤器--><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

image-20240224172107603

2.配置springDispatcherServlet-servlet.xml
    <!--加入两个常规配置--><!--支持SpringMVC的高级功能,比如JSR303校验,映射动态请求--><mvc:annotation-driven></mvc:annotation-driven><!--注意:这个annotation-driven要选择mvc的那个--><!--springMVC不能处理的请求,交给tomcat处理,比如css,js--><mvc:default-servlet-handler></mvc:default-servlet-handler>

image-20240224172357900

3.前端样式模板rest.jsp
<%--Date: 2024/2/24Time: 18:21User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h3>rest风格的crud</h3>
<br>
<hr>
<h3>rest风格的查阅书籍(get)</h3>
<a href="">点击查阅书籍</a>
<br>
<hr>
<h3>rest风格的添加书籍(post)</h3><form action="" method="">name:<input name="bookName" type="text"><br><input type="submit" value="添加书籍">
</form>
<br>
<hr>
<h3>rest风格的删除书籍(delete)</h3>
<a href="">删除指定id的书籍</a>
<br>
<hr>
<h3>rest风格的修改书籍(put)</h3><form action="" method=""><input type="submit" value="修改书籍">
</form>
<br>
<hr>
</body>
</html>
4.GET
1.BookHandler.java
@RequestMapping("/user")
@Controller
public class BookHandler {@GetMapping("/book/{id}") //这里使用的是路径参数public String getBook(@PathVariable("id") String id) {System.out.println("查询书籍id为" + id);return "success";}
}
2.rest.jsp

image-20240224184544701

3.结果展示

image-20240224184628183

5.POST
1.BookHandler.java
@RequestMapping("/user")
@Controller
public class BookHandler {@PostMapping("/book")public String addBook(String bookName) {System.out.println("添加书籍:" + bookName);return "success";}
}
2.rest.jsp

image-20240224185414443

3.结果展示

image-20240224185426051

6.DELETE(重点看)
1.rest.jsp
<%--Date: 2024/2/24Time: 18:21User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><%--引入jquery--%><script src="script/jquery-3.6.0.min.js"></script><script>$(function () {//当点击删除按钮的时候动态设置隐藏表单的action和_method的值$("#deleteBook").click(function () {//获取表单的jyquery对象,并将超链接的网址给其赋值$("#hiddenForm").attr("action", this.href);//获取隐藏按钮的值,并设置为delete$(":hidden").val("DELETE");//提交表单$("#hiddenForm").submit();//阻止超链接的默认提交行为!!!!!!return false;})})</script>
</head>
<body>
<h3>rest风格的crud</h3>
<br>
<hr><h3>rest风格的删除书籍(delete)</h3>
<a href="user/book/100" id="deleteBook">删除指定id的书籍</a>
<%--隐藏表单,用于传递name=_method的参数--%>
<%--动态传入action和_method的参数,并且以post的形式发送--%>
<form action="" method="post" id="hiddenForm" ><input type="hidden" name="_method">
</form>
<br>
<hr>
2.BookHandler.java
package com.sun.web.rest;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** 处理rest风格的请求* @author 孙显圣* @version 1.0*/
@RequestMapping("/user")
@Controller
public class BookHandler {//删除书籍@RequestMapping (value = "/book/{id}", method = RequestMethod.DELETE) //路径参数public String deleteBook(@PathVariable("id") String id) {System.out.println("删除书籍: id为" + id);//return给视图解析器,会解析这个重定向,让浏览器去访问网址/springmvc/user/successreturn "redirect:/user/success";}//重定向到success.jsp@RequestMapping("/success")public String success() {return "success";}}
3.结果展示

image-20240224204342936

7.PUT
1.rest.jsp
<%--Date: 2024/2/24Time: 18:21User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head></head>
<body>
<h3>rest风格的crud</h3>
<br>
<hr><h3>rest风格的修改书籍(put)</h3>
<%--1.post类型--%>
<form action="user/book/update" method="post">请输入id:<input type="text" name="id"><%--2.传入一个name=_method值为PUT的参数--%><input type="hidden" name="_method" value="PUT"><input type="submit" id="update" value="修改书籍">
</form>
<br>
<hr>
</body>
</html>
2.BookHandler.java
package com.sun.web.rest;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** 处理rest风格的请求* @author 孙显圣* @version 1.0*/
@RequestMapping("/user")
@Controller
public class BookHandler {//修改书籍@PutMapping("/book/update")public String updateBook(String id){System.out.println("修改书籍id为" + id);return "redirect:/user/success";}//重定向到success.jsp@RequestMapping("/success")public String success() {return "success";}
}
3.结果展示

image-20240224205634569

image-20240224205627514

8.HiddenHttpMethodFilter源码解析(debug)
1.下断点

image-20240224210142872

2.点击修改书籍

image-20240224210249173

image-20240224210303920

3.下一步,发现了请求是POST

image-20240224210403994

4.下一步,发现参数_method的值为PUT

image-20240224210733342

5.下一步,将这个值转换成大写(意味着,在填值的时候,不区分大小写)

image-20240224210849757

6.下一步,判断取得的值PUT是不是在集合中

image-20240224211017278

7.下两步,将请求转换成PUT类型使得SpringMVC框架可以识别

image-20240224211246657

9.Rest的DELETE和PUT总结
  • PUT
    • 表单提交的方式要是POST
    • 表单内部有一个参数名为_method,值为PUT
  • 如果是以超链接的形式提交(比如前面的例子中的DELETE)
    • 表单提交的方式为POST
    • 动态设置参数名为_method的值为DELETE
    • 动态设置action
    • 注意要阻止超链接自己的提交行为,否则会变成GET!!!

http://www.mrgr.cn/p/18673871

相关文章

【注释和反射】获取class类实例的方法

目录 一、获取一个类的Class对象的几种方法 代码 二、哪些类型可以有Class对象&#xff1f; 代码 一、获取一个类的Class对象的几种方法 Class对象是访问类元数据的入口&#xff0c;通过它可以获取类的名称、方法、字段、构造器、注解等信息&#xff0c;还可以创建类的实例…

xgp怎么注册阿根廷账号 微软商店xgp阿根廷账号注册教程

xgp怎么注册阿根廷账号 微软商店xgp阿根廷账号注册教程 xgp游戏平台是微软公司针对pc用户开发的一款游戏平台&#xff0c;在平台内有着知名的月包服务&#xff0c;玩家们只需每个月支付固定的费用&#xff0c;即可免费玩到不同的游戏大作&#xff0c;xgp平台也正是由月包服务…

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动 {%- for article in blog.articles -%}<div class"blog-articles__article article">{%- render article-card,article: article,media_height: section.settings.image_height,media_aspect_ratio: a…

基于K-prototype算法聚类

k-prototype聚类是一种用于混合数据类型聚类的算法&#xff0c;由Jain和Dubes在1988年提出。它主要用于同时包含连续属性和离散属性的数据集。k-prototype算法可以看作是k-means算法的扩展&#xff0c;它将k-means算法的思想应用于混合数据类型&#xff0c;通过为连续属性和离散…

屏幕状态自动检测+鼠标自动操作

目录 一、写在前面 1.1适用场景 1.2涉及到的库 二、函数库 2.1pyautogui-屏幕截图&鼠标操作 2.1.1屏幕截图screenshot函数 2.1.2鼠标移动及单击 2.2Opencv-模板匹配 2.2.1matchTemplate函数 2.2.2minMaxLoc函数 2.2.3相关代码 2.3base64-图片转base64 2.3.1在线…

[Linux_IMX6ULL驱动开发]-设备树简述

目录 设备树的引入 设备树具体框架 设备树的属性 label address-cells和size-cells compatible model status reg 设备树的编译 内核对设备树的处理 plateform_device如何对应plateform_driver 设备树的引入 之前已经学习了解过了总线驱动模型的概念&#xff0c;也…

《智能前沿:应对ChatGPT算力挑战》

在全球人工智能热潮中&#xff0c;以 ChatGPT 为代表的 AIGC 技术引发了广泛关注。人工智能和机器学习等技术对数据规模及处理速度等提出了更高要求。在数据成为主要生产要素的当下和未来&#xff0c;如何跟上时代的发展步伐&#xff0c;构建适应 AI 需求的数据中心&#xff0c…

Oracle Hint 语法详解

什么是Hint Hint 是 Oracle 提供的一种 SQL 语法&#xff0c;它允许用户在 SQL 语句中插入相关的语法&#xff0c;从而影响 SQL 的执行方式。 因为 Hint 的特殊作用&#xff0c;所以对于开发人员不应该在代码中使用它&#xff0c;Hint 更像是 Oracle 提供给 DBA 用来分析诊断问…

linux 定位进程文件路径

有时候用top 打开任务管理器时知道某个任务的进程的存在&#xff0c;但不知道是哪个文件&#xff0c;只需两条指令只可定位进程的可执行文件路径 使用 ls -l /proc/<PID>/cwd 命令来查找该进程的当前工作目录。使用 cat /proc/<PID>/cmdline 命令来查看该进程的命…

3. 无重复字符的最长子串/438. 找到字符串中所有字母异位词/560. 和为 K 的子数组

3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 思路&#xff1a;想象一下我们…

WebSocket的原理、作用、API、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 原理作用客户端 API服务端 API生命周期常见注解SpringBoot示例 WebSocket是一种 通信协议 &#xff0c;它在 客户端和服务器之间建立了一个双向通信的网络连接 。WebSocket是一种基于TCP连接上进行 全双工通信 的 协议 。 WebSocket允许客户端和服务器在 单个TCP连接上…

怎样用PHP语言实现远程控制三路开关

怎样用PHP语言实现远程控制三路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制三路开关&#xff0c;三路开关可控制三路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

【提示学习论文】BlackVIP: Black-Box Visual Prompting for Robust Transfer Learning论文原理

BlackVIP: Black-Box Visual Prompting for Robust Transfer Learning BlackVIP:稳健迁移学习的黑盒视觉提示 问题 黑盒白盒&#xff1f; 黑盒和白盒的概念与对预训练模型内部参数的了解程度相关。黑盒指的是对预训练模型的参数和结构缺乏详细了解&#xff0c;通常只能通过使…

python爬虫小案例——汽车之家

本篇文章是使用bs4中的BeautifulSoup和requests解析网页和获取数据&#x1f451;&#x1f31f; 文章目录 &#x1f31f;前言一、&#x1f349;bs4中的BeautifulSoup二、&#x1f349;bs4的语法三、&#x1f349;内容实践1. 确定想要爬取的内容2. 分析网页3. 获取数据分析 &…

三、CPU基础-缓存

计算机中缓存一般分为两个部分 1.内存 2.CPU Cache 一、CPU Cache分级 CPU Cache 通常分为大小不等的三级缓存&#xff0c;分别是 L1 Cache、L2 Cache 和 L3 Cache。 L1 Cache 和 L2 Cache 都是每个 CPU 核心独有的&#xff08;通常会分为「数据缓存」和「指令缓存」&#…

QA测试开发工程师面试题满分问答20: 软件的安全性应从哪几个方面去测试?

软件的安全性测试应从多个方面进行&#xff0c;并确保覆盖以下关键方面&#xff1a; 当回答问题时&#xff0c;可以根据自己的经验和知识&#xff0c;从上述要点中选择适合的方面进行详细说明。强调测试的综合性、全面性和持续性&#xff0c;并强调测试的重要性以及如何与开发团…

政安晨:【Keras机器学习示例演绎】(七)—— 利用 NeRF 进行 3D 体积渲染

目录 简介 设置 下载并加载数据 NeRF 模型 训练 可视化训练步骤 推理 渲染三维场景 可视化视频 结论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0…

01-服务与服务间的通信

这里是极简版&#xff0c;仅用作记录 概述 前端和后端可以使用axios等进行http请求 服务和服务之间也是可以进行http请求的spring封装的RestTemplate可以进行请求 用法 使用bean注解进行依赖注入 在需要的地方&#xff0c;自动注入RestTemplate进行服务和服务之间的通信 注…

制造数字化“管理套路”

在当今竞争激烈的市场环境中&#xff0c;制造企业始终关心三个核心问题&#xff1a;生产效率、产品质量、成本控制&#xff0c;所以许多企业渴望加强对生产过程的管理控制。 生产过程是一个相对复杂的过程&#xff0c;涉及到多个环节和因素。从原材料的采购到产品的设计、生产…

Nginx莫名奇妙返回了404

描述 nginx作为反向代理&#xff0c;代理python的服务&#xff0c;但是通过代理访问服务的时候&#xff0c;报了404的错误。 难受的是客户现场没有查看日志的权限&#xff0c;只有查看配置文件的权限&#xff0c;我们检测了几遍配置文件也没有找到问题&#xff0c;哎~ 问题引…