SpringMVC基础篇(二)

文章目录

    • 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.mzph.cn/news/828141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式4-24

作业&#xff1a; 整理思维导图 定义一个矩形类Rec&#xff0c;包含私有属性length&#xff0c;width&#xff0c;有以下成员函数&#xff1a; void set_length(int l); //设置长度 void set_width(int w); //设置宽度 int get_length(); //获取长度 int get_width(); //获取宽…

【上海大学计算机组成原理实验报告】四、指令系统实验

一、实验目的 了解指令结构、PC寄存器的功能和指令系统的基本工作原理。 学习设计指令的方法。 二、实验原理 根据实验指导书的相关内容&#xff0c;对于部分使用频率很高&#xff0c;且只用几条微指令即可完成的简单操作&#xff0c;可以把这部分简单操作的微指令序列固定下…

C#窗体中动态按钮的设计方法:创建特殊窗体

目录 1.动态按钮的设计方法 2.实例 &#xff08;1&#xff09; Resources.Designer.cs &#xff08;2&#xff09;Form1.Designer.cs &#xff08;3&#xff09;Form1.cs &#xff08;4&#xff09; 生成效果 在窗体界面中&#xff0c;通常以按钮来代替菜单栏的功能&…

华卓荣登「2024数商典型应用场景“乘数榜”」

4月18日&#xff0c;2024未来数商大会在杭州未来科技城学术交流中心举行&#xff0c;由浙江省科学技术协会指导&#xff0c;未来数商大会组委会主办&#xff0c;浙江省数字经济学会、国脉研究院承办。中国工程院院士陈纯、中国互联网协会副理事长高新民、中国社科院信息化研究中…

网工内推 | 深圳网工专场,上市公司、国企,安全认证优先

01 深圳市同为数码科技股份有限公司武汉分公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责网络设备的管理、调试、配置、维护等&#xff1b; 2、负责信息安全网络安全设备、系统的运维&#xff1b; 3、负责整体网络系统技术的相关工作&#xff0c;包括架构…

递归排列枚举2(c++)

简单单词接龙 有 n 个单词&#xff08; 1≤n≤50 &#xff09;&#xff0c;每个单词由 2 个小写字母组成&#xff0c;并约定第 1 个单词为龙头。 例如&#xff1a;n8。8 个单词为&#xff1a;aa、ac、ab、de、bh、hk、cd、af 接龙的方法为前一个单词的第 2 个字母和后一个单词…

python学习笔记(集合)

知识点思维导图 # 直接使用{}进行创建 s{10,20,30,40} print(s)# 使用内置函数set()创建 sset() print(s)# 创建一个空的{}默认是字典类型 s{} print(s,type(s))sset(helloworld) print(s) sset([10,20,30]) print(s) s1set(range(1,10)) print(s1)print(max:,max(s1)) print(m…

Docker的介绍及应用

1.什么是Docker 我们在部署大型项目的时候&#xff0c;肯定会遇到这种问题&#xff0c;大学项目组件较多&#xff0c;运行环境复杂&#xff0c;部署时会碰到一些问题&#xff1a;例如node、redis、mysql等这些应用都有自己的依赖和函数库。这种复杂的依赖关系很容易出现兼容问…

【docker】

下载脚本 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker-ce yum install -y yum-utils device-mapper-persistent-data lvm2 --s…

AI诈骗频发,深度合成服务算法备案势在必行

在数字化时代&#xff0c;深度合成技术以其强大的功能和应用领域&#xff0c;逐渐渗透到我们生活的各个方面。然而&#xff0c;技术的双刃剑效应也日益显现&#xff0c;AI诈骗等新型犯罪手段层出不穷&#xff0c;给个人和社会安全带来了严重威胁。为了筑牢网络安全防线&#xf…

Redis概述

目录 redis概述1. 什么是redis2. 为什么使用redis3. redis为什么快4. 哪些场景下使用redis 参考 Redis概述 Redis在线体验网站 Try Redis 基础概念&#xff0c;后续知识有时间整理&#xff08;数据结构、核心知识、高可用&可扩展、应用实践&#xff09; redis概述 1. 什么是…

YOLOv9改进策略 | 添加注意力篇 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

Mac中隐私安全性设置-打开任何来源

文章目录 **Mac中隐私安全性设置-打开任何来源**一、目的二、打开方式 Mac中隐私安全性设置-打开任何来源 一、目的 从外部下载的软件频繁打不开&#xff0c;需要从隐私安全性中重新选择一下&#xff1b;默认Mac隐藏了任何来源 二、打开方式 打开终端&#xff0c;输入一下命…

解耦、异步、削峰是什么

目录 面试官:你知道解耦、异步、削峰是什么吗解耦(Decoupling)异步(Asynchronous)削峰(Peak Shaving)该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:你知道解耦、异步、削峰是什么吗 解耦…

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 长文本通知测试 多行文本通知测试 图片通知测试 进度条通知测试 通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、…

不碎片化学习,尽量用整块的时间系统化学习

从高中毕业之后&#xff0c;我们好像就很难再继续那种系统化的学习&#xff0c;甚至失去了自我知识构建的能力。然而&#xff0c;真正的理解和掌握知识需要深入和连贯&#xff0c;这正是系统化学习的优势所在。 系统化学习的重要性 全面理解&#xff1a;系统化学习能够帮助我…

算法提高 第一期 KMP扩展算法

1## 具体思路&#xff1a; 和KMP算法的是想类似&#xff0c;充分利用已经比较字符性质来减少冗余的字符比较次数。KMP的思想是充分的利用模式串中所有前缀字串&#xff08;以模式串为开头的字串&#xff09;的真前缀和真后缀&#xff08;指子串的开始字符与子串的最后字符相等的…

docker中的资源控制

前言 docker 使用cgrqup控制资源&#xff0c;K8S 里面也有limit&#xff08;使用上限&#xff09; docker通过cgroup来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 Control …

【单链表】LeetCode:203.移除链表元素

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 前言&#xff1a; 该题是数据结构&#xff0c;单链表的一道基本题&#xff0c;刚刚准备学习数据结构&#xff0c;或者正在学习数据结…

CPP线程管理类实现

一个线程管理模块应该包含Task&#xff08;任务类&#xff09;、Thread&#xff08;线程类&#xff09;、线程管理类&#xff08;ThreadManager&#xff09;。 #pragma once #include <iostream> #include <thread> #include <mutex> #include <vector&g…