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也一样。

以上信息都是自己最近了解的简单信息,能帮助初学者,以后会把了解到的信息慢慢补充上去。如有错误,还望告知……

 

 

   

posted on 2012-11-14 11:34  zzjjian333  阅读(370)  评论(0编辑  收藏  举报