3.Spring MVC对 Restful ⻛格请求⽀持

rest ⻛格请求是什么样的?
 
springmvc rest ⻛格请求到底提供了怎样的⽀持
 
是⼀个注解的使⽤ @PathVariable ,可以帮助我们从 uri 中取出参数
 
4.1 什么是 RESTful
 
Restful 是⼀种 web 软件架构⻛格,它不是标准也不是协议,它倡导的是⼀个资源定位及资源操作的⻛格。
 
什么是 REST
 
REST (英⽂: Representational State Transfer ,简称 REST )描述了⼀个架构样式的⽹络系统, ⽐如
 
web 应⽤程序。它⾸次出现在 2000 Roy Fielding 的博⼠论⽂中,他是 HTTP 规范的主要编写者之
 
⼀。在⽬前主流的三种 Web 服务交互⽅案中, REST 相⽐于 SOAP Simple Object Access protocol
 
简单对象访问协议)以及 XML-RPC 更加简单明了,⽆论是对 URL 的处理还是对 Payload 的编码,
 
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 服务
等)。
 
RESTful ⻛格 URL :互联⽹所有的事物都是资源,要求 URL 中只有表示资源的名称,没有动词。
 
RESTful ⻛格资源操作 :使⽤ HTTP 请求中的 method ⽅法 put delete post get 来操作资源。 分别对
 
应添加、删除、修改、查询。不过⼀般使⽤时还是 post get put delete ⼏乎不使⽤。
 
RESTful ⻛格资源表述 :可以根据需求对 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请求转换为putdelete请求)

 

<!-- 配置 springmvc 请求⽅式转换过滤器,会检查请求参数中是否有 _method 参数,如果有就
按照指定的请求⽅式进⾏转换 -->
<filter>
<filter-name> hiddenHttpMethodFilter </filter-name>
<filter
class> org.springframework.web.filter.HiddenHttpMethodFilter </filter
class>
</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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值