RestFul简介以及在springmvc中的应用

什么是rest?

什么是rest?当我看到这个词的时候,我也不知道,我还以为是休息,最后查了一下,做web开发必须要知道rest
好了,就来简单介绍一下rest
rest即Representational State Transfer,表现层状态转化

互联网上资源(是服务)细化理解为一个url,如果访问某个资源通过http url访问。

我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation)

表现层对用户展示的形式:html、json、xml、pdf、图片。。
由于http协议的限制,服务器和客户端不能实现主动通信,只能有客户端发起请求服务端响应请求,也就是将请求方法和参数都包含url,
使用rest和不使用rest的规则都是这样做的,但是rest对于url做了很好的规划,这个规则将方法和资源分开看起来做的很简单,但是却使我们更好理解了,上网无非就是对于网络资源的操作,网络资源在internet中直白点说就是url(个人理解)所以如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。

GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源
RESTful就是对http最全面最好的诠释,RESTful就是进行互联网开发的理念、思想。

RESTful开发中url的规范:

1、url规范

原始url:http://www……/queryItems.action?type=101&id=111…
规范后:http://wwww…/item/101/1
比如:
对商品查询
url:http://wwww…/item/101/1 表示对101分类 下的1号商品查询
http请求方法设置为get
比如:
对商品删除
url:http://wwww…/item/101/1表示对101分类 下的1号商品删除
http请求方法设置为delete

rest向客户端发送数据

在请求时指定服务端给客户端响应的内容类型是什么?
实现:在请求时设置http头中Accept
对商品查询,以json格式展示:
rest设置:
url为:http://wwww…/item/101/1
客户端请求此url并且设置Accept为”applicatoin/json”

服务端处理方法:
接收请求,解析Accept,根据指定类型返回不同的内容格式。
如果解析到Accept为”applicatoin/json”,服务端就将内容转成json输出

如果解析到Accept为”applicatoin/xml”,服务端就将内容转成xml输出

RESTful架构的特点:

综合上面的解释,我们总结一下什么是RESTful架构:
  (1)每一个URI代表一种资源;
实现:
规范后的url规范后:http://wwww…/item/101/1,特点是参数通过url传递。
  (2)客户端和服务器之间,传递这种资源的某种表现层;
实现:
服务端解析Accept,根据客户端的要求将内容进行输出。

  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。
实现:
服务解析客户端请求的http方法,根据不同的方法执行不同的service操作。

rest在spingmvc中实际操作

1.首先在web.xml中配置支持rest风格的前端控制器,即过滤所有路径

<!-- 配置springmvc的rest风格的url解析, -->
    <servlet>
    <servlet-name>springmvc-rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始参数 -->
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
    </servlet>



    <servlet-mapping>
    <servlet-name>springmvc-rest</servlet-name>
<!-- 注意这个是重点 -->
    <url-pattern>/</url-pattern>
    </servlet-mapping>

编写支持rest的controler方法,使用注解完成,简单:

package com.leige.controler;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.leige.domain.Student;
import com.leige.service.StudentService;

@Controller
@RequestMapping("/rest")
public class RestControler {
    //注入service
    @Autowired
    @Qualifier(value="studentService")
    StudentService studentService;
    /** * @param sid * @return返回json * * * @PathVariable将url中的路作为参数赋给方法 * ,注意路径使用占位符 */
    @RequestMapping(value="/testRest/{sid}")
    public @ResponseBody Student testRest(@PathVariable("sid")Integer sid){

        return studentService.selectStudent(sid);

    }; 
}

测试结果:

RestFul简介以及在springmvc中的应用_第1张图片
重要的是理解rest的设计思想,rest的思想讲解:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

你可能感兴趣的:(spring,mvc,web开发,互联网,url,Restful)