REST
主要记录自己对rest应用的一些理解,如有错误,望告知……
一、Rest,即Representational State Transfer的缩写。这个词组的翻译是"表现层状态转化"。
如果一个架构符合REST原则,就称它为RESTful架构。就是说REST是一种风格。
二、在设计rest时,主要依赖于http的信息来获取相应资源。目前的浏览器主要支持get和post两种方式,在rest中还会用到put和delete的形式(用到这两种方式时要在服务端进行转换,下面将会说到)。
你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。比如如下所示:
/student/1 HTTP GET => 得到id = 1的student /student/1 HTTP DELETE => 删除 id = 1的student /student/1 HTTP PUT => 更新id = 1的student /student HTTP POST => 新增student
在上面的代码中可以用相同的URI来完成不同的工作,主要依赖于http中的header头部信息,如果是GET /student/1 HTTP/1.1这样的信息就会去得到相应信息。如果想看到自己的header信息,可以使用fiddler软件来跟踪。
三、springMVC3.0简单实现rest服务。
本次利用spring基于注解的映射来完成,也可以利用spring配置文件的形式来完成。以前用到的配置文件比较多,首先会配置Mapping,根据具体的Mapping信息来找到相应的Controller,然后再调用相应的业务逻辑,最后返回信息。在基于注解的开发中,我们可以用@Controller来实现,就不用在配置文件中配置Mapping了,实现起来也比较简单。
关于springMVC简单的实现方式在另一篇文章中已经有了介绍,供大家参考。如果要实现注解,如要在配置文件中加入如下信息。
<context:component-scan base-package="自己相应的Controller包" />
@Controller @RequestMapping(value="/student") public class StudentServer { private StudentManager manager; @RequestMapping(value="/{id}",method=RequestMethod.POST) public String createStudent(User user){ return "topic"; } @RequestMapping(value="/{id}",method=RequestMethod.GET) @ResponseBody public Student getStudent(@PathVariable String id){ System.out.println(id+"get"); return manager.getStudent(id); } @RequestMapping(value="/{id}",method=RequestMethod.DELETE) @ResponseBody public void deleteStudent(@PathVariable String id){ System.out.println("delete"+id); } @RequestMapping(value="/{id}",method=RequestMethod.PUT) @ResponseBody public void putStudent(@PathVariable String id){ System.out.println("put"+id); } @Autowired public void setManager(StudentManager manager) { this.manager = manager; } }
这样就会根据URI和http的header头信息调用不同的方法,然后在控制台输出相应的信息。
四、put和delete的实现
首先在web.xml中添加filter,来转换到自己需要的URI
<filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <servlet-name>rest</servlet-name> </filter-mapping>
在jsp的form中添加一个隐藏的input。
<form method="post" modelAttribute="user" action=http://localhost:8080/RestTest/student/1> <input type="hidden" name="_method" value="put"/> username: <input name="username"/><br/> pass: <input name="pass"/><br/> <input type="submit" value="添加新用户"/> </form>
这样再点击提交按钮时,就会根据_method=put来进行转换,来调用相应的方法。delete也一样。
以上信息都是自己最近了解的简单信息,能帮助初学者,以后会把了解到的信息慢慢补充上去。如有错误,还望告知……