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
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>
2.配置springDispatcherServlet-servlet.xml
xml 复制代码
    <!--加入两个常规配置-->
    <!--支持SpringMVC的高级功能,比如JSR303校验,映射动态请求-->
    <mvc:annotation-driven></mvc:annotation-driven><!--注意:这个annotation-driven要选择mvc的那个-->
    <!--springMVC不能处理的请求,交给tomcat处理,比如css,js-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
3.前端样式模板rest.jsp
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
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
3.结果展示
5.POST
1.BookHandler.java
java 复制代码
@RequestMapping("/user")
@Controller
public class BookHandler {

    @PostMapping("/book")
    public String addBook(String bookName) {
        System.out.println("添加书籍:" + bookName);
        return "success";
    }
}
2.rest.jsp
3.结果展示
6.DELETE(重点看)
1.rest.jsp
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
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.结果展示
7.PUT
1.rest.jsp
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
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.结果展示
8.HiddenHttpMethodFilter源码解析(debug)
1.下断点
2.点击修改书籍
3.下一步,发现了请求是POST
4.下一步,发现参数_method的值为PUT
5.下一步,将这个值转换成大写(意味着,在填值的时候,不区分大小写)
6.下一步,判断取得的值PUT是不是在集合中
7.下两步,将请求转换成PUT类型使得SpringMVC框架可以识别
9.Rest的DELETE和PUT总结
  • PUT
    • 表单提交的方式要是POST
    • 表单内部有一个参数名为_method,值为PUT
  • 如果是以超链接的形式提交(比如前面的例子中的DELETE)
    • 表单提交的方式为POST
    • 动态设置参数名为_method的值为DELETE
    • 动态设置action
    • 注意要阻止超链接自己的提交行为,否则会变成GET!!!
相关推荐
重生之我在20年代敲代码36 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文38 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱40 分钟前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
serve the people42 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_072 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战2 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
编程零零七3 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
技术无疆4 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
2401_858286114 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py4 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络