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/24
  Time: 18:21
  User: 孙显圣
  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/24
  Time: 18:21
  User: 孙显圣
  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/success
        return "redirect:/user/success";
    }
    //重定向到success.jsp
    @RequestMapping("/success")
    public String success() {
        return "success";
    }

}

3.结果展示

image-20240224204342936

7.PUT
1.rest.jsp
<%--
  Date: 2024/2/24
  Time: 18:21
  User: 孙显圣
  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!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/570968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统IO

Linux系统中的IO函数主要包括两大类&#xff1a;标准C库中的函数和Linux系统调用。这些函数可以用于文件操作、网络通信、设备控制等多种IO任务。以下是Linux系统中常用的IO函数和系统调用的概述&#xff1a; 标准C库IO函数 这些函数是高级的、封装好的&#xff0c;并且与操作…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…

[MoeCTF-2022]Sqlmap_boy

title:[MoeCTF 2022]Sqlmap_boy 查看网页源代码&#xff0c;得到提示 <!-- $sql select username,password from users where username".$username." && password".$password.";; --> 用万能密码绕过&#xff0c;用’"闭合 爆数据库…

【NLP】大语言模型基础之GPT

大语言模型基础之GPT GPT简介1. 无监督预训练2. 有监督下游任务微调 GPT-4体系结构1. GPT-4的模型结构2. GPT-4并行策略3. GPT-4中的专家并行GPT-4的特点 参考连接 以ELMo为代表的动态词向量模型开启了语言模型预训练的大门&#xff0c;此后&#xff0c;出现了以GPT和BERT为代表…

Simulink从0搭建模型03-Enabled Subsystem 使能子系统

参考博客 b站视频 【Simulink 0基础入门教程 P4 使能子系统 Enabled Subsystem 的使用介绍】 个人听了这个博主的视频风格觉得很适合我入门学习&#xff0c;讲得很清楚。 另外&#xff0c;视频里面教得很详细了&#xff0c;我也不会再详细写怎么打开创建等步骤&#xff0c;跟着…

年如何在不丢失数据的情况下解锁锁定的 Android 手机?

当您忘记密码、PIN 码或图案并且想要解锁 Android 手机时&#xff0c;您可能会丢失 Android 手机上的数据。但您无需再担心&#xff0c;因为在这里&#xff0c;我们想出了几种解锁锁定的 Android 手机而不丢失数据的方法。 方法 1. 使用 Android Unlock 解锁锁定的 Android 且不…

拿捏 顺序表(1)

目录 1. 顺序表的分类2. 顺序表实现3. 顺序表实现完整代码4. 总结 前言: 一天xxx想存储一组数据, 并且能够轻松的实现删除和增加, 此时数组大胆站出, 但是每次都需要遍历一遍数组, 来确定已经存储的元素个数, 太麻烦了, 于是迎来了顺序表不屑的调侃: 数组你不行啊… 顺序表是一…

MSE实现全链路灰度实践

技术架构包括以下基础设施和云服务&#xff1a; 1个地域&#xff1a;ACK集群、微服务应用、MSE实例均部署在同一地域下。 1个专有网络VPC&#xff1a;形成云上私有网络&#xff0c;确保核心云资源的网络环境&#xff0c;如容器服务ACK、微服务引擎MSE。 ACK集群&#xff1a;简单…

升级 jQuery:努力打造健康的 Web 生态

jQuery 对 Web 的影响始终是显而易见的。当 jQuery 在 2006 年首次推出时&#xff0c;几乎立即成为 Web 开发人员的基本工具。它简化了 JavaScript 编程&#xff0c;使操作 HTML 文档、处理事件、执行动画等变得更加容易。从那时起&#xff0c;它在 Web 标准和浏览器功能的演变…

idea中打印日志不会乱码,但是部署到外部tomcat中乱码了。

问题&#xff1a;如图Tomcat乱码&#xff0c;而且启动时的系统日志不会乱码&#xff0c;webapp中的打印日志才乱码。 idea中的情况如下&#xff1a;正常中文展示。 问题分析&#xff1a;网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配&#xff0c;网上集中的解决…

Springboot的日常操作技巧

文章目录 1、自定义横幅2、容器刷新后触发方法自定义3、容器启动后触发方法自定义**CommandLineRunner**ApplicationRunner 不定时增加 参考文章 1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 &#xff0c;默认它会找叫做banner的文件&#xff0c;各种格式…

“奇观”初见,祁门竞赛上海正式发

布给上下山水、左右人文的“徽州”&#xff0c;另起一笔“烟火” 城市更新从空间营造进入地方创生。何为地方&#xff1f;如何创生&#xff1f;其关键也许在于“持续打开”&#xff0c;源源不断吸引新生力量参与&#xff0c;从在地文化中生长出创作生态。 镶嵌于长三角腹地&a…

Ubuntu Pycharm安装

下载PyCharm&#xff0c;https://www.jetbrains.com/pycharm/download/?sectionlinux 然后按照下图执行安装&#xff1a; 安装的时候可能出现的问题&#xff1a; 问题1&#xff1a;No JDK found. Please validate either PYCHARM_JDK, JDK_HOME or JAVA_HOME environment var…

SHELL脚本(全是干货)

一、shell是什么&#xff1f; 1. 1 shell 是一种脚本语言 脚本语言的本质是一个文件&#xff0c;文件里面存放的是特点格式的指令&#xff0c;系统可以使用脚本解析器翻译或者解析指令&#xff0c;并且执行&#xff08;它不需要编译&#xff09; shell 即是应用程序&#xff…

江开2024年春《大学英语(B)(2) 060052》过程性考核作业4参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1阅读Passage One&#xff0c;回答C-1C-4个问题。请…

高频前端面试题汇总之HTML篇

1. src和href的区别 src和href都是用来引用外部的资源&#xff0c;它们的区别如下&#xff1a; src&#xff1a; 表示对资源的引用&#xff0c;它指向的内容会嵌入到当前标签所在的位置。src会将其指向的资源下载并应⽤到⽂档内&#xff0c;如请求js脚本。当浏览器解析到该元素…

OpenCV 如何实现边缘检测器

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何实现拉普拉斯算子的离散模拟 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数…

为什么浏览器打印后会有一个undefined

问题&#xff1a; 原因&#xff1a;浏览器中调试代码&#xff0c;浏览器会默认输出打印语句返回值&#xff0c;多行调试命令返回时只执行最后一个返回值 1、这里没有打印操作&#xff0c;但是返回了1。控制台输出的是调试命令的【返回值】 2、如果调试命令本身就带有打印的语…

C系统编程:从零手搓一个shell

背景 这么久没更新就是在干这件事&#xff01;&#xff01;因为系统编程已经学的差不多了&#xff0c;所以想找几个项目练练手&#xff0c;之前就一直想写一个自己的shell&#xff01;&#xff01;现在终于有机会实现了。 首先说明一下我的操作系统&#xff1a;Arch linux 服务…

HFSS端口介绍2---波端口

前面我们讨论了Lumped Port设定相关的内容,这节我们继续讨论Wave Port(波端口)使用相关的问题。 波端口使用范围 封闭结构:如波导、同轴电缆等 包含多个传播模式的模型 端口平面在求解区域外的模型 模型中包含均匀的波导或者传输线结构 波端口的大小 对于封闭的传输线结构:边…