SpringMVC之REST风格的url的使用

1首先介绍一下什么是REST。

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

资源(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 用来删除资源。

REST风格的URL就是系统希望以非常简洁的URL地址来发送请求,根据请求方式来区分对一个资源的增删改查。

举个例子,那对书籍的正删改查操作来讲。

URL为:/book/1 请求方式:HTTP GET ----> 代表获取1号图书的信息。

URL为:/book/1 请求方式为:HTTP DELETE ----->删除1号图书

URL为: /book/1 请求方式为:HTTP PUT----->修改1号图书的信息

URL为:/book 请求方式为:HTTP POST---->添加图书

由于页面上只能发送POST请求和GET请求,那么如何发送DELETE请求和PUT请求?
SpringMVC为我们提供了Filter,这个Filter可以把普通请求转换为REST风格的请求。
发送REST风格的URL:
1、在web.xml中配置一个SpringMVC自带的支持REST风格的过滤器----》HiddenHttpMethodFilter
2、创建一个post请求的表单,表单中的必须有一个表单项携带一个name属性为’_method’的参数,value的值为DELETE或为PUT。

示例代码:
web.xml中的配置


	<!-- 设置SpringMVC支持rest风格的url -->
	<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>
	

前段页面的准备:

<body>

<a href="book">获取BOOK</a>

<form action="book" method="post">
	<input type="submit" value="保存">
</form>
<br/>
<form action="book" method="post">
	<input type="hidden" value="put" name="_method">
	<input type="submit" value="修改">
</form>
<br/>
<form action="book" method="post">
	<input type="hidden" value="delete" name="_method">
	<input type="submit" value="删除">
</form>
</body>

controller层:

@Controller
public class TestRestUrlController {

	@RequestMapping(value="/book",method=RequestMethod.GET)
	public String get() {
		System.out.println("查询book成功");
		return "success";
	}
	
	@RequestMapping(value="/book",method=RequestMethod.POST)
	public String add() {
		System.out.println("添加book成功");
		return "success";
	}
	
	@RequestMapping(value="/book",method=RequestMethod.PUT)
	public String updata() {
		System.out.println("修改book成功");
		return "success";
	}
	
	@RequestMapping(value="/book",method=RequestMethod.DELETE)
	public String delete() {
		System.out.println("删除图书成功");
		return "success";
	}
}

注意,高版本的Tomcat对Rest风格的支持有问题,请求访问以后跳转到指定页面时,指定页面会报错,如何解决?
解决方案,在要跳转的页面上添加一个isErrorPage即可。如在success.jsp上添加一个isErrorPage=true即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值