Restful 和 Jersey介绍(Web Service )

一:REST简介

REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。

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)

如下表所示:

方法/资源 资源集合, URI 如:

http://host/<appctx>/resources   成员资源,URI 如:

http://host/<appctx>/resources/1234

GET 列出资源集合的所有成员检索标识为 1234 的资源的表示形式。

PUT 使用一个集合更新(替换)另一个集合。更新标记为 1234 的数字资源。

POST 在集合中创建数字资源在下面创建一个子资源。

DELETE 删除整个资源集合。删除标记为 1234 的数字资源。

二:REST 与 JSR(jersey)

JSR-311  Java API for RESTful Web Services (JAX-RS) 1.0 and 1.1

JAX-RS是将在JavaEE 6引起的一种新技术。 JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口 ,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java标注来简化Web服务的客户端和服务端 的开发和部署。包括:

@Path,标注资源类或者方法的相对路径   

@GET,@PUT,@POST,@DELETE,标注方法是HTTP请求的类型。   

@Produces,标注返回的MIME媒体类型   

@Consumes,标注可接受请求的MIME媒体类型

@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie,@FormParam来自于HTTP请求的post的form格式。

三:Jersey jar包简介

Jersey 是 JAX-RS 的参考实现,它包含三个主要部分。

核心服务器(Core Server):通过提供 JSR 311 中标准化的注释和 API 标准化,您可以用直观的方式开发 RESTful Web 服务。

核心客户端(Core Client):Jersey 客户端 API 帮助您与 REST 服务轻松通信。

集成(Integration):Jersey 还提供可以轻松集成 Spring、Guice、Apache Abdera 的库。

注意:jar包下载 jersey jar包下载(需要积分的哦,辛苦整理的)

四:自己创建一个rest资源

用微账户的查询接口作一个例子

Java代码

@Path("/accinfo")// prgramname/rest/下的路径

public class AccountInfoResource {

@Context

UriInfo uriInfo;

@Context

Request request;

/*

* Get all accounts info

*/

@GET

@Path("all")// accinfo的子路径,也是外界调用的路径  

@Produces(MediaType.APPLICATION_XML)

public List<AccountInfo> getAllaccounts() throws UnsupportedEncodingException{

List<AccountInfo> retList = new ArrayList<AccountInfo>();

EntityManager em = EntityManagerHelper.getEntityManager();

MaaccdtapManager mm = new MaaccdtapManager(em);

List<Maaccdtap> mList = mm.getAllAccounts();

AccountInfo ai = null;

AccountAdapter ad = new AccountAdapter();

for(Maaccdtap m : mList){

ai = ad.getAccountInfo(m);

retList.add(ai);

}

EntityManagerHelper.closeEntityManager();

return retList;

}

/*

* Get account info by mbrseq id   @GET方式

*/

@GET

@Path("{accountid}")// accinfo的子路径,也是外界调用的路径,既作为accountid又作为参数

@Produces(MediaType.APPLICATION_JSON)

public AccountInfo getAccountBySid(@PathParam("accountid") String accountid)

throws UnsupportedEncodingException{

EntityManager em = EntityManagerHelper.getEntityManager();

MaaccdtapManager mm = new MaaccdtapManager(em);

Maaccdtap mp = mm.getAccountBySid(accountid);

AccountInfo ai = null;

if(null != mp){

AccountAdapter ad = new AccountAdapter();

ai = ad.getAccountInfo(mp);

}

EntityManagerHelper.closeEntityManager();

return ai;

}

/*

* Get account info by mbrseq id and name   @POST方式

*/

@POST

@Path("change")

@Consumes(MediaType.APPLICATION_FORM_URLENCODED)

public void responseAccountChange(

@FormParam(value = "id") String id,

@FormParam(value = "name") String name,

@Context HttpServletResponse servletResponse) throws IOException{

System.out.println("Reveiced change parameters from UI:");

System.out.println("ID is " + id);

System.out.println("Name is " + name);

URI newUrl = uriInfo.getAbsolutePathBuilder().path(id).build();

System.out.println(newUrl.toString());

Response.created(newUrl).build();

//ServletOutputStream os = servletResponse.getOutputStream();

PrintWriter pw = servletResponse.getWriter();

pw.write("The change request has been sent to backend and id is " + id);

pw.flush();

}

}

测试:

用下面的URL即可访问相应的账户信息(即Resource)

 http://ip:port/MicroAcc/rest/accinfo/{mbrseq}      

   http://ip:port/MicroAcc/rest/accinfo/al l

@Produces(MediaType.APPLICATION_JSON)则可以产生Json的输出。

@POST注释会接收http post request, 将Web表单里的action指向POST的地址,例如:

http://ip:port/MicroAcc/rest/accinfo/change 被注释的方法即可收到表单的内容。

五:配置信息 Jersey配置:

Jersey 1.2 以后的版本和一些Update的维护版本只支持Java SE 6, 在选择版本和相应服务器时需要注意。、

从 Jersey 开发包中以下的库为必须:

核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar

核心客户端:(用于测试)jersey-client.jar

JAXB 支持:(在高级样例中使用)jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar

JSON 支持:(在高级样例中使用)jersey-json.jar

(JSON是类似于xml的一种通用,在不同工程/语言/平台间传递数据的格式,其比xml更精炼更优良,几乎所有的语言和框架已经支持了,传递过来的数据再用JSON解码即可,就像c++struct结构体一样,直接json.xxx即可访问,多层的话就json.xxx.xxx)

您需要将所有的 REST 请求发送到 Jersey 容器 —— 在应用程序的 web.xml 文件中定义 servlet 调度程序(参见清单 1)。除了声明 Jersey servlet 外,它还定义一个初始化参数,指示包含资源的 Java 包。

Web.xml: Xml代码

<servlet>

<servlet-name>Jersey REST Service</servlet-name>

<servlet-class>

com.sun.jersey.spi.container.servlet.ServletContainer

</servlet-class>

<init-param>

<param-name>com.sun.jersey.config.property.packages</param-name>

<param-value>sh.cmbchina.pension.resources</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>Jersey REST Service</servlet-name>

<url-pattern>/rest/*</url-pattern>

</servlet-mapping>

 这样,所有在包sh.cmbchina.pension.resources下面的resource类都会被注册为Restful url的响应处理类。

时间: 2024-10-18 05:21:38

Restful 和 Jersey介绍(Web Service )的相关文章

Restful 架构方式的 web service

现在公司项目用的apache wink 搭建的web service ,感觉挺好用的.顺便学习一个这种架构方式 . 个人理解apache 实现Restful 架构方式技术有两种,如果有其他新的知识或不同意看法的,大家可以留言,一起学习,本人出道不久,各位一起共勉吧. apache CXF  与  apahce WINK 分别实现了Restful 风格.其实之前的web service 实现 大多数使用 RPC 与 SOAP 来实现进行消息传递实现的,现在主流的Restful 渐渐把它们取代,XM

分布式系统阅读笔记(九)-----Web Service服务

一.介绍 Web Service用一句话概括就是它提供了一个服务接口使客户端能够与服务端进行交互用非常多种的方式,超过普通的浏览器的模式.在Web Service中通常是以XML的格式方式进行传输和通信的.这其中还涉及了XML的Security安全方面的操作. 1.Web Service服务是Web服务器的一个扩展形式. 2.Web Service采用的XML的数据格式保证了可读性. 3.一个标准的Web Service通过一个URI统一资源标志符的方式被客户端访问的,URI的值可以有2种方式,

Web Service概念梳理

计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些早期介绍Web Service的书为准.如有错误,欢迎指正! -------------------------------------------------------------- 提前预警!概念太多,你需要仔细阅读,或要阅读两遍.   SOA                        

用Jersey为Android客户端开发Restful Web Service

平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关注相对较少,但是如果我们要自己一个人设计并开发一套完整的系统,我们就必须同时具备客户端和服务端的开发知识,而且我认为同时掌握客户端和服务端的开发技术还是很有用处的,不仅有助于提升我们的架构知识和能力,而且还……你懂得!身边一些做WEB开发的朋友很多都说为客户端开发接口和单纯地做WEB项目并没有很大的

Maven+jersey快速构建RESTful Web service集成mongodb-短小而精悍-值得拥有

源码下载地址:http://pan.baidu.com/s/1gdIN4fp 转载请注明原著地址:http://blog.csdn.net/tianyijavaoracle/article/details/41708217 Jersey是JAX-RS(JSR311)开源参考实现用于构建RESTful Web service.此外Jersey还提供一些额外的API和扩展机制,所以开发人员能够按照自己的需要对Jersey进行扩展 理论的东西在这里我就不多说了!这个实例是实现了REST的三个基本get

Jersey(1.19.1) - Deploying a RESTful Web Service

JAX-RS provides a deployment agnostic abstract class Application for declaring root resource and provider classes, and root resource and provider singleton instances. A Web service may extend this class to declare root resource and provider classes.

使用Java创建RESTful Web Service(转)

REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Styles and the Design of Network-based Software Architectures”<体系结构与基于网络的软件架构设计>中提出了REST. REST是一种体系结构.而HTTP是一种包含了REST架构属性的协议. REST基础概念 在REST中所有东西都被看作资源.

使用JAX-RS创建RESTful Web Service

http://blog.csdn.net/withiter/article/details/7349795 本章介绍REST架构.RESTful web service和JAX-RS(Java API for RESTful Web Service,JSR 311).JAX-RS的参考实现Jersey实现了对JSR 311中定义的注解的支持,使得使用Java编程语言开发RESTful web service变得简单.如果是使用GalssFish服务器,可以使用Update Tool安装Jerse

在GlassFish应用服务器上创建并运行你的第一个Restful Web Service【翻译】

前言 本人一直开发Android应用,目前Android就业形势恶劣,甚至会一路下滑,因此决定学习服务器开发.采用的语言是java,IDE是Intellij,在下载Intellij的同时看到官网很多优秀的guide文章,于是按照guide成功完成了一个RESTful的demo.官方文档非常简洁,给我带来了很大的帮助,于是翻译之,希望对其他不愿意看原文的人有所帮助.由于水平有限,读者发现错误请指正,谢谢. 原文地址: https://www.jetbrains.com/help/idea/2016