restful 风格特征:
可寻址性(Addressability)
无状态性(Statelessness)
连通性(Connectedness)
统一接口(Uniform Interface)
面向资源(Resource Oriented)
超文本驱动(Hypertext Driven)
松耦合(Loosely Coupled)
REST风格架构的设计步骤:
规划数据集
将数据集划分为资源
使用URI为资源命名
将资源上的操作映射到4种HTTP方法
定义资源之间的关系
用超链接和表单将新的资源与已有资源关联起来
根据可能发生的出错情况,定义响应状态代码
=========================================================
jersey 相关资料地址
一.jersey官网:
http://jersey.java.net/
二.jersey源码及其demo下载地址(注意最新版本为1.0):
http://download.java.net/maven/2/com/sun/jersey/
三.jersey官网邮件讨论组
http://n2.nabble.com/Jersey-f576304.html
四.jsr311规范官网
http://jcp.org/en/jsr/detail?id=311
==============================================================
Rest Web Services
1》》 Representational State Transfer, 具象状态传输。
REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识。客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集。RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务。通常,RESTful Web 服务应该定义以下方面:
• Web 服务的基/根 URI,比如 http://host/<appcontext>/resources。
• 支持 MIME 类型的响应数据,包括 JSON/XML/ATOM 等等。
• 服务支持的操作集合(例如 POST、GET、PUT 或 DELETE)。
2》》 @注释说明
2.1 @Produces 表示返回的格式
@Produces( {MediaType.APPLICATION_XML }) 表示返回的xml格式
@Produces( {MediaType.APPLICATION_JSON }) 表示返回的json格式
@Produces( { MediaType.TEXT_PLAIN }) 表示返回的纯文本格式
2.2 @ Consumes
@Consumes ( { application/x-www-form-urlencoded }) 窗体数据被编码为名称/值对
简单例子:
1 web.xml 文件修改:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.bes.web.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
1 java代码:
package com.bes.web;
import com.sun.jersey.api.core.PackagesResourceConfig;
public class MyApplication extends PackagesResourceConfig {
public MyApplication() {
super("com.bes.jersey");
}
}
2 服务端webservice
package com.bes.jersey;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
@Path("helloworld")
public class HelloWorldResource {
@GET
@Produces("text/plain")
public String getChichedMessage(
@QueryParam("name") String name,
@QueryParam("country") String country
) {
StringBuilder builder = new StringBuilder();
builder.append("Hello world");
if (name != null) {
builder.append(",").append(name);
}
if (country != null) {
builder.append(" from ").append(country);
}
builder.append("!");
return builder.toString();
}
@POST
@Consumes("text/plain")
public void postChichedMessage() {
return;
}
}
可以通过 web页面调用uri 或者 通过 java代码进行调用。
最后直接上 工程源码:
查看附件。