资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
Jersey 框架建 jax-rs 规范的 webservice概述JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装 为Web资源。标注包括:Path,标注资源类或方法的相对路径GET, PUT,POST,DELETE,标注方法是用的HTTP请求的类型Produces,标注返回的MIME媒体类型Consumes,标注可接受请求的MIME媒体类型PathParam, QueryParam, HeaderParam, CookieParam, MatrixParam, FormParam,分另U标注方 法的参数来自于HTTP请求的不同位置,例如PathParam来自于URL的路径,QueryParam来自于URL 的查询参数,HeaderParam来自于HTTP请求的头信息,CookieParam来自于HTTP请求的Cookie。目前JAX-RS的实现包括:Apache CXF,开源的Web服务框架。Jersey,由Sun提供的JAX-RS的参考实现。RESTEasy, JBoss 的实现。Restlet,由 Jerome Louvel 和 Dave Pawson 开发,是最早的 REST 框架,先于 JAX-RS 出现。Apache Wink, 一个Apache软件基金会孵化器中的项目,其服务模块实现JAX-RS规范Myeclipse2013+tomcat7+jdk1.7 软件自带的 jersey 框架新建项目File=New=Web Service Project。project name:项目名称,eg: rest, jaxRS.,选择 REST(JAX-RS)下一步。 勾选 core,jaxb,clie nt,js on 然后下一步。其中,jaxb(Java Architecture for XML Binding)可以将java class 序列号成 xml新建项目中,有一项配置servlet,运行容器的选项vdisplay-nameJAX-RS REST Servletv/display-nameJAX-RS REST Servletv/servlet-namecom.s un .jersey.spi.c ontain er.servlet.ServletC ontain erv/servlet-class/jersey运行容易,默认vload-on-startup1v/load-on-startupvservlet-mapp ingvservlet-nameJAX-RS REST Servletv/servlet-namevurl-patter n /services/*v/url-patter n路径,默认jaxrs,可根据自己情况自己填v/servlet-mapp ing 自 J RE System Library JavaSE-1.6 昌a JAXB 2.1.13 Libraries-或 JavaEE 6.0 Generic Library-鸟STL 1.2.1 Library JAX-RS 1.1 Libraries (Project Js需要的jar有jaxb, jax-rs的包,myeclipse已经提供完整,不需要额外的包,至此项目新建完毕编写运行的基本类与方法配置点击使用eclipse创建Rest圧图标创建 webservice,选择restblog工程,Framework选择REST(JAX-RS)通过以上的操作可以配置方法的路径,参数类型,反馈类型,get或者post方法(另外,在Java文件上右键菜单=MyEclipse=Add REST Method,跟上文一样配置服务方法)也可以直接手动写资源注入,具体含义再次列举Path,标注资源类或方法的相对路径GET, PUT, POST, DELETE,标注方法是用的HTTP请求的类型Produces,标注返回的MIME媒体类型Consumes,标注可接受请求的MIME媒体类型PathParam, QueryParam, HeaderParam, CookieParam, MatrixParam, FormParam,分另U标注方 法的参数来自于HTTP请求的不同位置,例如PathParam来自于URL的路径,/category/id中的id就是 PathParam QueryParam 来自于 URL的查询参数,HeaderParam 来自于 HTTP请求的头信息, CookieParam 来自于 HTTP 请求的 Cookie。详解下资源注入:举例:一般的资源注入,直接Path(/pathl*/id)GETProduces(application/xml)Public .(PathParam(“id) String id)Pathfsuan)public class MyService Path是访问路径,在最初的类开头也可以有path “/”或者”jaxRs”都可以Get就不多讲了Produces反馈的数据类型至于,请求参数数据类型可以不用设置PathParam, QueryParam:上文举例的Path(”/pathl*/id”)路径为例,get方式的访问方式最常见的是*/path1/suan?end=2&start=1,其中suan是参数,start, end 一样是参 数,其中suan是卩8出卩8胆皿,start, end是QueryParam此时方法声明Path(/path1*/id)GETProduces(application/xml)functionName(PathParam(“id) int id, QueryParam(“ start) String start, QueryParam String end)即可列举一个最简单的访问方法(0Prciduce5()6ETpublic String suansuan(SQueryParam( name)呂trin呂 name)_eturn name; (fflGETgPath)(S)Prcduces( text/html1)public String suan( r.athParaitr( name1 )呂trin呂 name) _eturn name; QueryParam(name) Defaul tValue(” 默认组织)St ring name上文关于参数的默认值,也没什么好说的,具体看我整理的网页测试,tomcat编译后,除了浏览器路径访问测试,myeclipse也提供了测试右键工程根目录 restblog 选择 MyEclipse=Test with RESTful WebServices Explorer 将会打开测试窗口。关于rest的声明周期:1. 默认情况下rest服务的生命周期=request的生命周期,请求过后立即消毁,所以默认情况下rest服 务类是线程安全的2. 如果你需要使用单例来发布,jax-rs提供了注解Singletonjava view plaincopySingletonpublic class UserContext 加入Singleton注解以后,再重启运行i的值就会不停累加所以这时rest服务的生命周期=应用服务器生 命周期3.另外还有一种生命周期就是PerSession,每一个session请求,就产生一个rest资源实例,直到这个 session消毁,这个rest资源才会消失。java view plaincopyPerSessionpublic class UserContext 所以,rest有三种生命周期,三种周期分别等于request,session,applcation的生命周期jaxb好,还没结束,还有重头戏,就是关于响应的json或者xml格式数据我先给一份完整的xml格式的文档:v?xml version=1.0 encoding=UTF-8?vceb:CEB501Messagexsi:schemaLocation=http:/www.chinaport.gov.cn/cebxmlns:ceb=http:/www.chinaport.gov.cn/ceb xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance vceb:LogisticsHeadvceb:guidc1abcb68-372b-4df8-a074-e072d54d5672v/ceb:guid vceb:customsCode2349v/ceb:customsCodevceb:appType1v/ceb:appType先讲jaxb关于xml的注解:(举例都已上文为例)XmlRootElement 参数:name namespace将一个Java类映射为一段XML的根节点 定义这个根节点的名称定义这个根节点命名空间Eg: XmlRootElement(name = ceb:CEB501Message,namespace=http:/suansuan.com)XmlAccessorType定义映射这个类中的何种类型需要映射到XML,默认public的field或property的属性 放置到xml中XmlElement指定一个字段或get/set方法映射到XML的节点 参数: defaultValue指定节点默认值name指定节点名称namespace指定节点命名空间required是否必须(默认为false)nillable该字段是否包含nillable=true属性(默认为false)type定义该字段或属性的关联类型Eg:XmlElement(name=ceb:LogisticsHead)XmlAttribute 指定一个字段或get/set方法映射到XML的属性。 参数:name指定属性名称namespace指定属性命名空间required是否必须(默认为false)XmlTransient定义某一字段或属性不需要被映射为XML。XmlType定义映射的一些相关规则 参数: propOrder指定映射XML时的节点顺序factoryClass指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身factoryMethod 指定工厂类的工厂方法 name定义XML Schema中type的名称namespace指定Schema中的命名空间Eg:XmlType(propOrder = id, name, age,book)XmlElementWrapper为数组元素或集合元素定义一个父节点。如,类中有一元素为List
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号