Spring MVC应用--深刻理解Rest风格请求

Spring MVC应用–深刻理解Rest风格请求

Restful 是⼀种 web 软件架构⻛格,它不是标准也不是协议,它倡导的是⼀个资源定位及资源操作的风格。

对Restful风格请求支持

rest风格请求是什么样的?
springmvc对rest风格请求到底提高了怎样的支持?

什么是Restful?

REST(英⽂:Representational State Transfer,简称 REST)描述了一个架构样式的⽹络系统, 比如web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码,
REST 都倾向于⽤更加简单轻量的方法设计和实现。值得注意的是 REST 并没有⼀个明确的标准,而更像是⼀种设计的风格。
它本身并没有什么实⽤性,其核心价值在于如何设计出符合 REST风格的网络接口。
REST特性 :资源 表现层 状态转移

Restful 的优点

它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

Restful 的特性

资源(Resources):网络上的⼀个实体,或者说是网络上的⼀个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是⼀个具体的存在。可以用⼀个 URI(统⼀资源定位符)指向它,每种资源对应⼀个特定的 URI 。要获取这个资源,访问它的 URI 就可以,因此URI 即为每⼀个资源的独⼀⽆⼆的识别符。
表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层 (Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚⾄可以采用⼆进制格式。
状态转化(State Transfer):每发出⼀个请求,就代表了客户端和服务器的⼀次交互过程。HTTP 协议,是⼀个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器, 必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “ 表现层状态转化” 。具体说, 就是 HTTP 协议里面,四个表示操作方式的动词:GET 、POST 、PUT 、DELETE 。它们分别对应四种基本操作:GET ⽤来获取资源,POST ⽤来新建资源,PUT 用来更新资源,DELETE ⽤来删除资源。

RESTful的示例

rest是⼀个url请求的风格,基于这种⻛格设计请求的url没有rest的话,原有的url设计
http://localhost:8080/user/queryUserById.action?id=3
url中定义了动作(操作),参数具体锁定到操作的是谁
有了rest风格之后,rest中,认为互联网中的所有东西都是资源,既然是资源就会有⼀个唯⼀的uri标识它,代表它http://localhost:8080/user/3 代表的是id为3的那个⽤户记录(资源)锁定资源之后如何操作它呢?
常规操作就是增删改查根据请求方式不同,代表要做不同的操作

  • get 查询获取资源
  • post 增加,新建资源
  • put 更新
  • delete 删除资源
  • rest风格带来的直观体现:就是传递参数方式的变化,参数可以在uri中了
    /account/1 HTTP GET :得到 id = 1 的 account
    /account/1 HTTP DELETE:删除 id = 1 的 account
    /account/1 HTTP PUT:更新 id = 1 的 account
    URL:资源定位符,通过URL地址去定位互联⽹中的资源(抽象的概念,比如图⽚、视频、app服务等)。
    REST 风格 URL:互联⽹所有的事物都是资源,要求URL中只有表示资源的名称,没有动词。
    REST风格资源操作:使用HTTP请求中的method方法put、delete、post、get来操作资源。分别对应添加、删除、修改、查询。不过⼀般使⽤时还是 post 和 get。put 和 delete几乎不使用。
    REST风格资源表述:可以根据需求对URL定位的资源返回不同的表述(也就是返回数据类型,比如XML、JSON等数据格式)。
    Spring MVC 支持 RESTful风格请求,具体讲的就是使⽤ @PathVariable 注解获取 RESTful ⻛格的请求URL中的路径变量。
    示例代码
    前端jsp页⾯
<div>
 <h2>SpringMVC对Restful⻛格url的⽀持</h2>
 <fieldset>
 <p>测试⽤例:SpringMVC对Restful⻛格url的⽀持</p>
 <a href="/demo/handle/15">rest_get测试</a>
 <form method="post" action="/demo/handle">
 <input type="text" name="username"/>
 <input type="submit" value="提交rest_post请求"/>
 </form>
 <form method="post" action="/demo/handle/15/lisi">
 <input type="hidden" name="_method" value="put"/>
 <input type="submit" value="提交rest_put请求"/>
 </form>
 <form method="post" action="/demo/handle/15">
 <input type="hidden" name="_method" value="delete"/>
 <input type="submit" value="提交rest_delete请求"/>
 </form>
 </fieldset>
 </div>

后台Handler⽅法

/*
 * restful get /demo/handle/15
 */
 @RequestMapping(value = "/handle/{id}",method ={RequestMethod.GET})
 public ModelAndView handleGet(@PathVariable("id") Integer id) {
	 Date date = new Date();
	 ModelAndView modelAndView = new ModelAndView();
	 modelAndView.addObject("date",date);
	 modelAndView.setViewName("success");
	 return modelAndView;
 }
 /*
 * restful post /demo/handle
 */
 @RequestMapping(value = "/handle",method = {RequestMethod.POST})
 public ModelAndView handlePost(String username) {
	Date date = new Date();
	ModelAndView modelAndView = new ModelAndView();
	modelAndView.addObject("date",date);
	modelAndView.setViewName("success");
	return modelAndView;
 }
 /*
 * restful put /demo/handle/15/lisi
 */
 @RequestMapping(value = "/handle/{id}/{name}",method =
{RequestMethod.PUT})
 public ModelAndView handlePut(@PathVariable("id") Integer id,@PathVariable("name") String username) {
	Date date = new Date();
	ModelAndView modelAndView = new ModelAndView();
	modelAndView.addObject("date",date);
	modelAndView.setViewName("success");
	return modelAndView;
}
 /*
 * restful delete /demo/handle/15
 */
 @RequestMapping(value = "/handle/{id}",method ={RequestMethod.DELETE})
 public ModelAndView handleDelete(@PathVariable("id") Integer id) {
	 Date date = new Date();
	 ModelAndView modelAndView = new ModelAndView();
	 modelAndView.addObject("date",date);
	 modelAndView.setViewName("success");
	 return modelAndView;
 }

web.xml中配置请求⽅式过滤器(将特定的post请求转换为put和delete请求)

<!--配置springmvc请求⽅式转换过滤器,会检查请求参数中是否有_method参数,如果有就
按照指定的请求⽅式进⾏转换-->
 <filter>
 <filter-name>hiddenHttpMethodFilter</filter-name>
 <filterclass>org.springframework.web.filter.HiddenHttpMethodFilter</filterclass>
 </filter>
 <filter-mapping>
 <filter-name>encoding</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
 <filter-mapping>
 <filter-name>hiddenHttpMethodFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值