文章目录

  • 1. RESTful是什么?
  • 2. 传统风格与RESTful风格对比
    • 2.1 传统风格
    • 2.1 RESTful风格
  • 3. RESTful的实现
    • 3.1 GET、POST方式
      • 3.1.1 创建控制器类
      • 3.1.2 创建一个jsp页面
    • 3.2 PUT、DELETE方式
      • 3.2.1 编写控制器方法
      • 3.2.2 配置HiddenHttpMethodFilter
      • 3.2.3 编写jsp页面
    • 3.3 Http405 解决方法

1. RESTful是什么?

  • RESTful 也称为REST(英文:Representational State Transfer)即表现层状态传递,它是一种软件架构风格或设计风格,而不是一个标准。
  • REST 是Roy Fielding博士在2000年他的博士论文中提出来的。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

2. 传统风格与RESTful风格对比

2.1 传统风格

如果是原来的架构风格,需要发送四个请求,分别是?
查询用户:http://localhost:8080/springmvc/selectuser?id=1GET
增加用户: http://localhost:8080/springmvc/insertuserPOST
修改用户: http://localhost:8080/springmvc/updateuserPUT
删除用户: http://localhost:8080/springmvc/deleteuser?id=1 DELETE

2.1 RESTful风格

按照传统方式发送请求的时候比较麻烦,需要定义多种请求,而RESTful在HTTP协议中,有不同的发送请求的方式,分别是GET、POST、PUT和DELETE方式,分别对应查询、修改、添加和删除操作。我们如果能让不同的请求方式表示不同的请求类型就可以简化我们的查询。

查询用户: http://localhost:8080/springmvc/user/1 GET ­­查询
查询多个用户: http://localhost:8080/springmvc/user GET
添加用户: http://localhost:8080/springmvc/user POST ­­­添加
修改用户: http://localhost:8080/springmvc/user PUT ­­修改
删除用户:http://localhost:8080/springmvc/user DELETE ­­删除

注意:RESTful风格中的URL不存在动词形式的路径,如selectuser表示查询用户,是一个动词,要改为名词user。

3. RESTful的实现

RESTful 风格提倡URL地址使用统一的风格设计,各单词之间用斜杠分开。

3.1 GET、POST方式

3.1.1 创建控制器类

@Controller
public class UserController {@RequestMapping(value = "/user", method = RequestMethod.GET)public String getAllUser(){System.out.println("查询所有用户信息");return "success";}@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)public String getUserById(){System.out.println("根据用户ID查询用户信息");return "success";}@RequestMapping(value = "/user",method = RequestMethod.POST)public String insertUser(String username,String password){System.out.println("添加用户信息:" + username + ","+ password);return "success";}
}

3.1.2 创建一个jsp页面

  • 通过超链接的方式进行测试
<a href="${pageContext.request.contextPath}/user">查询全部</a><br>
<a href="${pageContext.request.contextPath}/user/1">根据id查询信息</a><br>
<form action="${pageContext.request.contextPath}/user" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="添加"><br>
</form>
  • 运行之后可以在控制台正常输出

3.2 PUT、DELETE方式

一切看起来都非常美好,但是大家需要注意了,我们在发送请求的时候只能发送post或者get,没有办法发送put和delete请求,那么应该如何处理呢?下面开始进入代码环节:

3.2.1 编写控制器方法

@RequestMapping(value = "/user",method = RequestMethod.PUT)
public String updateUser(String username,String password){System.out.println("修改用户信息:" + username + ","+ password);return "success";
}@RequestMapping(value = "/user",method = RequestMethod.DELETE)
public String deleteUser(String username,String password){System.out.println("删除用户信息:" + username + ","+ password);return "success";
}

3.2.2 配置HiddenHttpMethodFilter

  • 在web.xml文件中配置HiddenHttpMethodFilter过滤器来处理put和delete请求方式
<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>

3.2.3 编写jsp页面

处理put和delete请求方式注意事项:

  • 请求方式必须为: post
  • 请求参数必须为:_method
<form action="${pageContext.request.contextPath}/user" method="post"><input name="_method" value="put" type="hidden"/>用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="修改"><br>
</form>
<form action="${pageContext.request.contextPath}/user" method="post"><input name="_method" value="delete" type="hidden"/>用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="删除"><br>
</form>

测试结果:

3.3 Http405 解决方法

在处理put和delete请求方式时,可能会遇到这种情况:控制台能够正常输出,但是浏览器会报405错误

解决办法:
1.加入 @ResponseBody 注解。
2.请求先转给一个Controller,再返回jsp页面。
注意:注解添加位置在控制器方法处

RESTful的详解相关推荐

  1. RESTful 风格详解

    一. 什么是Restful风格 1.1 概念 RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用 XML 格式定义或 JSON 格式定义.最常用的数据格式是JSON.由于JS ...

  2. springmvc教程--RESTful支持详解

    RESTful支持 1.1 需求 RESTful方式商品修改.商品查询. 1.2 添加DispatcherServlet的rest配置 <servlet><servlet-name& ...

  3. RESTful架构详解【转】

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  4. RESTful 架构详解

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  5. RESTful 架构详解设计模式一种约束

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  6. RESTful接口详解

    一.Rest架构的主要原则: 1.网络上的所有事物都被抽象为资源 2.每个资源都有一个唯一的资源标识符 3.同一个资源具有多种表现形式(xml,json等) 4.对资源的各种操作不会改变资源标识符 5 ...

  7. 深入理解幂等性及Restful风格API的幂等性问题详解

    什么是幂等性 HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外).也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同. ...

  8. python django restful_详解Django rest_framework实现RESTful API

    一.什么是REST 面向资源是REST最明显的特征,资源是一种看待服务器的方式,将服务器看作是由很多离散的资源组成.每个资源是服务器上一个可命名的抽象概念.因为资源是一个抽象的概念,所以它不仅仅能代表 ...

  9. ETCD v3 restful api 使用详解

    ETCD v3 restful api 使用详解 网上已经有很多关于v2接口的使用了,类型下面的请求方式,本文就主要讲解v3版本的restful api的使用方式. //V2版本curl http:/ ...

最新文章

  1. 【NOIP2018】 游记
  2. python3并发编程基础
  3. IIS6的PHP最佳配置方法
  4. access数据库删除两个日期之间 的数据 SQL语句
  5. Selenium常用的8大元素定位方法
  6. js笔记(8)之数组篇
  7. 如何在 ASP.Net Core 中使用 Autofac
  8. RTSP协议基本分析
  9. 计算机文化基础论述题,计算机文化基础复习题六
  10. Android设计模式之——工厂方法模式
  11. Java基础_学习笔记_13_类的多态性(二)
  12. 配置win2003 server IIS的总结,为什么IIs的工作进程会在空闲时间释放的问题。同时学会了throw的真正含义,throw的真正含义就是导致程序停止,崩溃,很简单,网摘也有记录。...
  13. 标准模板库(STL)之 vector 列传 (二)
  14. echarts源码打包_Echarts模块v1.5更新【更新支持多线程,封装大量快速方法,增加史上最详细示例】...
  15. python绘制中文柱状图+显示数字
  16. 文本分析-全角字符串与半角字符串的转换
  17. 一首《你莫走》把已经远去的疫情呼唤回来,新一年的路要怎么走?
  18. video标签设置autoplay(自动播放)无效
  19. 全球卫星导航系统(GNSS)相关概念总结
  20. C# 扫描并读取图片中的文字

热门文章

  1. 玩转图形学 (三)归去来
  2. (附源码)计算机毕业设计SSM泸定中学宿舍管理系统设计
  3. TCP协议--流量控制,拥塞控制,MSS
  4. form表单的target属性
  5. FZU Problem 2243 Daxia like uber(最短路)
  6. avue-crud使用说明
  7. 近10年来愚人节经典假新闻
  8. DIV怎么自动添加滚动条?并给滚动条添加样式
  9. 高思禄老师:合伙开公司必须要注意的原则有哪些
  10. 高等数学期末总复习 DAY 3.利用导数定义求极限 判断连续与可导的关系 关于导数定义的证明题 基本求导 基本高阶求导 抽象函数求导