作者:手机用户2602907295 | 来源:互联网 | 2023-10-10 21:51
RESTful不是一种技术,而是一种风格。下面这个是百度百科对这种风格的解释:
一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
我们来比较一下REST和非REST的区别,本文和上一篇的有很大的关联,可以先看上一篇文章把配置文件弄好和体验一下SpringMVC的好处。
这是我上一篇文章的路径:http://blog.csdn.net/qq_18895659/article/details/51824624
我们这篇和上一篇所有的配置文件一样都没有变。
好,我们继续回归本文
----非REST的url:
http://...../queryItems.action?id=001&type=T01
----REST的url风格:
http://..../items/001/T01
注意 @PathVariable 将 @RequestMapping 中value带的变量 此处是 {id}与方法中参数绑定
注意:如果变量名称与方法参数名称不一致,则需要指定
REST缺点 : 跳转的时候浏览器不认post/get 之外的访问方法 ,而此处是DELETE
我们下面写一个例子来看一下当使用POST和使用DELETE时候的区别。配置文件和上篇的配置文件相同,这里就不贴出来了。
我们来看我的action类
@Controller
@RequestMapping("/person")//注解为控制器指定可以处理哪些 URL 请求,跟struts2中的命名空间作用一样
public class PersonAction{
/**
* 使用@RequestParam注解指定参数的name
* 注解指定参数名称
*/
@RequestMapping(value="/delete/{id}/{name}",method=RequestMethod.DELETE)
public String delete(@PathVariable Integer id,@PathVariable("name") String username){
System.out.println(id + " " + username) ;
return "person";
}
}
关于其中的一些参数这里也不再做解释了。
下面这是我的一个DELETE测试jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
RESTful 风格 post
action="${pageContext.request.contextPath}/person/delete/1/haha"
我们可以看到url已经有变化了。我们可以从action里面找出端倪
@RequestMapping(value="/delete/{id}/{name}",method=RequestMethod.DELETE)
而这种风格缺点也是跳转的时候浏览器不认post/get 之外的访问方法 ,而此处是DELETE,所以在点击测试delete按钮测试时页面转发会出现错误
但我们的值却可以传过去。可以看到我们页面的值成功传到后台了。
那我们用post方法呢,我们可以在上面的action类里面添加如下的方法。
@RequestMapping(value="/method1",method=RequestMethod.POST)
public String method1(Integer id,String name){
System.out.println(id + " --- "+name);
return "person";
}
我们把jsp改为如下
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
RESTful 风格 post
注意修改这个隐参
我们可以来测试一下和DELETE有何不同。
由上面可以看到,转发成功了,传值也成功了。
通过上例可以发现,使用@RequestMapping(value="",.ethod=RequestMethod.POST)可以限制接收提交的方式,有利于规范代码。
好了,这就是springMVC的RESTful风格的使用,如有哪里错误,请大神指出。