您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > Jersey和Tomcat构建RESTfulWebService及其调用
RESTfulWeb服务简介REST在2000年由RoyFielding在博士论文中提出,他是HTTP规范1.0和1.1版的首席作者之一。REST中最重要的概念是资源(resources),使用全球ID(通常使用URI)标识。客户端应用程序使用HTTP方法(GET/POST/PUT/DELETE)操作资源或资源集。RESTfulWeb服务是使用HTTP和REST原理实现的Web服务。通常,RESTfulWeb服务应该定义以下方面:Web服务的基/根URI,比如。支持MIME类型的响应数据,包括JSON/XML/ATOM等等。服务支持的操作集合(例如POST、GET、PUT或DELETE)。表1演示了典型RESTfulWeb服务中使用的资源URI和HTTP方法。表1.RESTfulWeb服务示例方法/资源资源集合,URI如:成员资源,URI如:列出资源集合的所有成员。检索标识为1234的资源的表示形式。PUT使用一个集合更新(替换)另一个集合。更新标记为1234的数字资源。POST在集合中创建数字资源,其ID是自动分配的。在下面创建一个子资源。DELETE删除整个资源集合。删除标记为1234的数字资源。JSR311(JAX-RS)和JerseyJSR311或JAX-RS(用于RESTfulWebServices的JavaAPI)的提议开始于2007年,1.0版本到2008年10月定稿。目前,JSR311版本1.1还处于草案阶段。该JSR的目的是提供一组API以简化REST样式的Web服务的开发。在JAX-RS规范之前,已经有Restlet和RestEasy之类的框架,可以帮助您实现RESTfulWeb服务,但是它们不够直观。Jersey是JAX-RS的参考实现,它包含三个主要部分。核心服务器(CoreServer):通过提供JSR311中标准化的注释和API标准化,您可以用直观的方式开发RESTfulWeb服务。核心客户端(CoreClient):Jersey客户端API帮助您与REST服务轻松通信。集成(Integration):Jersey还提供可以轻松集成Spring、Guice、ApacheAbdera的库。构建RESTfulWeb服务我将从可以集成到Tomcat的“helloworld”应用程序开始。该应用程序将带领您完成设置环境的过程,并涉及Jersey和JAX-RS的基础知识。然后,我将介绍更加复杂的应用程序,深入探讨JAX-RS的本质和特性,比如多个MIME类型表示形式支持、JAXB支持等。HelloWorld:第一个JerseyWeb项目要设置开发环境:IDE:EclipseIDEforJEE(v3.4+)或IBMRationalApplicationDeveloper7.5JavaSE5或更高版本Web容器:ApacheTomcat6.0(Jetty和其他也可以)Jersey库:Jersey1.0.3归档,包含所有必需的库设置Jersey的环境首先,为Eclipse上的Tomcat6.0创建服务器运行时。这是用于RESTfulWeb应用程序的Web容器。然后创建一个名为“Jersey”应用程序,并将目标运行时指定为Tomcat6.0。最后,从Jersey开发包中将以下库复制到WEB-INF下的库目录:核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar,jersey-bundle.jar核心客户端:(用于测试)jersey-client.jarJAXB支持:(在高级样例中使用)jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jarJSON支持:(在高级样例中使用)jersey-json.jarJersey库文件的下载地址:需要下载的库文件如下:activation-1.1.1.jarasm-3.3.1.jarjackson-core-asl-1.9.2.jarjackson-jaxrs-1.9.2.jarjackson-mapper-asl-1.9.2.jarjaxb-api-2.2.4.jarjaxb-impl-2.2.4-1.jarjersey-bundle-1.12.jarjersey-client-1.12.jarjersey-core-1.12.jarjersey-json-1.12.jarjersey-server-1.12.jarjettison-1.1.jarstax-api-1.0-2.jar开发REST服务现在,您已经设置好了开发第一个REST服务的环境,该服务对客户端发出“Hello”。要做到这一点,您需要将所有的REST请求发送到Jersey容器——在应用程序的web.xml文件中定义servlet调度程序(参见清单1)。除了声明Jerseyservlet外,它还定义一个初始化参数,指示包含资源的Java包。清单1.在web.xml文件中定义Jerseyservlet调度程度[html]viewplaincopy1.servlet2.servlet-nameJerseyRESTService/servlet-name3.servlet-class4.com.sun.jersey.spi.container.servlet.ServletContainer5./servlet-class6.init-param7.param-namecom.sun.jersey.config.property.packages/param-name8.param-valuesample.hello.resources/param-value9./init-param10.load-on-startup1/load-on-startup11./servlet12.servlet-mapping13.servlet-nameJerseyRESTService/servlet-name14.url-pattern/rest/*/url-pattern15./servlet-mapping现在您将编写一个名为HelloResource的资源,它接受HTTPGET并响应“HelloJersey”。清单2.sample.hello.resources包中的HelloResource[java]viewplaincopy1.@Path(/hello)2.publicclassHelloResource{3.@GET4.@Produces(MediaType.TEXT_PLAIN)5.publicStringsayHello(){6.returnHelloJersey;7.}8.}该代码中有几个地方需要强调:资源类(ResourceClass):注意,资源类是一个简单的Java对象(POJO),可以实现任何接口。这增加了许多好处,比如可重用性和简单。注释(Annotation):在javax.ws.rs.*中定义,是JAX-RS(JSR311)规范的一部分。@Path:定义资源基URI。由上下文根和主机名组成,资源标识符类似于。@GET:这意味着以下方法可以响应HTTPGET方法。@Produces:以纯文本方式定义响应内容MIME类型。部署到Tomcat容器在Jersey项目上点击右键,Export---WARfile,生成Jersey.war文件,复制该文件到Tomcat安装目录下的webapps目录下,重新启动tomcat,Jersey.war文件将被自动解压。测试Hello应用程序要测试应用程序,可以打开您的浏览器并输入URL。您将看到响应“HelloJersey”。这非常简单,使用注释处理请求、响应和方法。以下部分将涉及JAX-RS规范的必要部分,使用Contacts示例应用程序中的代码片段进行介绍。您可以在源代码包中找到这个高级样例的所有代码。资源资源是组成RESTfulWeb服务的关键部分。您可以使用HTTP方法(如GET、POST、PUT和DELETE)操作资源。应用程序中的所有内容都是资源:员工、联系人、组织等。在JAX-RX中,资源通过POJO实现,使用@Path注释组成其标识符。资源可以有子资源。在这种情况下,父资源是资源集合,子资源是成员资源。在样例Contacts应用程序中,您将操作个人联系人和联系人集合。ContactsResource是/contactsURI组成的集合资源,ContactResource是/contacts/{contactId}URI组成的成员资源。下划线JavaBean是一个简单的Contact类,使用id、名称和地址作为成员字段。参见清单3和清单4了解详情。清单3.ContactsResource[java]viewplaincopy1.@Path(/contacts)2.publicclassContactsResource{3.@Context4.UriInfouriInfo;5.@Context6.Requestrequest;7.8.@GET9.@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})10.publicListContactgetContacts(){11.ListContactcontacts=newArrayListContact();12.contacts.addAll(ContactStore.getStore().values());13.returncontacts;14.}15.16.@Path({contact})17.publicContactResourcegetContact(18.@PathParam(contact)Stringcontact){19.returnnewContactResource(uriInfo,request,contact);20.}21.}有几个有趣的地方需要注意。@Context:使用该注释注入上下文对象,比如Request、Response、UriInfo、ServletContext等。@Path({contact}):这是@Path注释,与根路径“/contacts”结合形成子资源的URI。@PathParam(contact):该注释将参数注入方法参数的路径,在本例中就是联系人id。其他可用的注释有@FormParam、@QueryParam等。@Produces:响应支持多个MIME类型。在本例和上一个示例中,APPLICATION/XML将是默认的MIME类型。您也许还注意到了,GET方法返回定制Java对象而不是String(纯文本),正如上一个HelloWorld示例所示。JAX-RS规范要求实现支持多个表示形式类型,比如InputStream、byte[]、JAXB元素、JAXB元素集合等等,以及将其序列化为XML、JSON或纯文本作为响应的能力。下文我将提供更多有关表示形式技术的信息,尤其是JAXB元素表示形式。清单4.ContactResource[java]viewplaincopy1.publiccl
本文标题:Jersey和Tomcat构建RESTfulWebService及其调用
链接地址:https://www.777doc.com/doc-2881865 .html