




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用环境:jdk1.5+eclispe3.4+myeclispe7File=New=Web Service Pject name: restblog,选择REST(JAX-RS) 下一步。勾选core,jaxb,client,json然后下一步。之所以创建servlet是因为会请求一些物理不存在的URI,事实上就是这个servlet在处理这些resource。jaxb(Java Architecture for XML Binding)可以将java class序列号成xml,请参考/developer/technicalArticles/WebServices/jaxb/json就不多说了,这个包可以实现java class 转化成json。点击finish完成工程创建。这样创建的工程与通常的web工程的区别就是添加了servlet在web.xml,这里贴出servlet代码:后续的文章中也会提到他。JAX-RS REST ServletJAX-RS REST Servletcom.sun.jersey.spi.container.servlet.ServletContainer1JAX-RS REST Servlet/services/*在工程的classpath下会引用下列包:这些包可以从/maven/2/com/sun/jersey/ 下载(使用maven2)首先创建一个简单的类Category使用XmlRootElement标注该类点击 图标创建webservice,选择restblog工程,Framework选择REST(JAX-RS)Java class : CategoryService URL path: 资源路径 填写category ,这样所有与category相关的资源都使用http:/yourpath/services/category访问LIfecycle: Pre-request(JAX-RS default)每次请求时生成一个服务类实例(这里指CategoryService),singleton:单例,只存在一个实例Consumes: 接受的contentType 包括application/xml ,application/json 通俗来说就是接受提交数据的格式。Produces: 产生的数据格式选项同样为applicatin/xml,application/json 等。注意这里的Consumes/Produces是指请求http:/yourpath/services/category的数据格式。点击 Add 按钮添加服务方法,界面如下:这是一个构造服务方法的界面,下面有代码预览。在添加参数的时候,选择Param Type选项的意义:Context: 这是一个标识该参数为请求上下文。可以直接获得request的参数。QueryParam:uri?之后的参数PathParam:uri中的参数如:/category/id中的id就是PathParamFormParam:使用post提交的参数。CookieParam: Cookie参数。HeaderParam: 请求的头部信息。也许你已经注意到没有session参数,是的,所谓的无状态stateless多少就体现在这里,web服务不保存请求相关的信息。综合上面的用法,下面的例子涵盖了常用的服务方法的写法,之中的处理过程暂时用硬编码。后面的文章会介绍HIbernate,Spring的应用。packagecom.dawnpro.restblog;importjava.util.ArrayList;importjava.util.List;importjavax.ws.rs.Consumes;importjavax.ws.rs.DELETE;importjavax.ws.rs.DefaultValue;importjavax.ws.rs.FormParam;importjavax.ws.rs.GET;importjavax.ws.rs.POST;importjavax.ws.rs.PUT;importjavax.ws.rs.Path;importjavax.ws.rs.PathParam;importjavax.ws.rs.Produces;importjavax.ws.rs.core.Context;importjavax.ws.rs.core.UriInfo;importorg.codehaus.jettison.json.JSONException;importorg.codehaus.jettison.json.JSONObject;Path(category)publicclassCategoryServiceGETProduces(application/json,application/xml)/*getCategories产生json,xml两种数据格式,具体那种格式取决于contentType*/publicListgetCategories()Listresult=newArrayList();result.add(newCategory(1,第一个分类);result.add(newCategory(2,第二个分类);returnresult;GETPath(id)publicCategorygetCategory(PathParam(id)intid)returnnewCategory(id,id为+id+的类别);GETPath(json/id)Produces(application/json)publicJSONObjectgetCategoryJson(PathParam(id)intid)/产生jsonJSONObjecto=newJSONObject();tryo.put(id,id);o.put(name,id为+id+的category);catch(JSONExceptione)e.printStackTrace();returno;PUTPath(add)Produces(text/html)Consumes(application/xml,application/json)publicStringaddCategory(Categorycategory)System.out.println(处理添加类别逻辑,接受的数据为id:+category.getId()+,name:+category.getName();returnok;POSTPath(addbyname)publicStringaddCategory(FormParam(categoryname)DefaultValue(未命名)Stringcateogryname)System.out.println(处理添加类别逻辑,接受的数据为name:+cateogryname);return添加类别+cateogryname+成功;POSTProduces(text/html)Path(updatecategory)Consumes(application/xml,application/json)publicStringupdateCategory(Categorycategory)System.out.println(处理更新类别逻辑,接受的数据为id:+category.getId()+,name:+category.getName();returnok;DELETEPath(delete/id)publicStringdeleteCategory(PathParam(id)intid)System.out.println(处理删除类别逻辑,接受的数据为id:+id);returnok;GETPath(commonProcess)publicStringcommonProcess(ContextUriInfoinfo)/Context参数标识UriInfoStringBuilderbuf=newStringBuilder();for(Stringparam:info.getQueryParameters().keySet()buf.append(param+:+info.getQueryParameters().get(param);buf.append(n);System.out.println(buf.toString();returnok;你可以在CategoryService.java编辑中 右键菜单=MyEclipse=Add REST Method添加服务方法。右键工程根目录restblog选择MyEclipse=Test with RESTful WebServices Explorer 将会打开测试窗口。 浏览中的地址为:http:/localhost:8080/restblog/services/application.wadl 首先/services是由servlet拦截。如果在浏览器中浏览该地址,将得到一个xml文件。这个文件叫web service application description language。顾名思义他是一个服务描述文件。需要说明的是当调用方法的参数为Category类型,调用时传递的是xml同时contentType设置为application/xml这样jersey会将xml转化为Category类型的对象。如果转化出错则服务调用失败,会返回错误信息。这里放出一些调用的例子:1.get请求获得Category xml 数据。$(#btncall).click(function () $.ajax( url:/restblog/services/category, type:GET, dataType:xml, success :function (data) var tablehtml=编号名称; $(category,data).each(function (i,category) var id=$(id,category).text(); var name=$(name,category).text(); tablehtml+=(+id+name+); ); tablehtml+=; $(tablehtml).appendTo(#result); ,error:function () alert(get category list failed!); ););jquery的ajax调用有一个参数dataType是期望得到的数据格式,目前版本的可选值为xml,json,html,jsonp.默认的是html。指定了该属性,jquery会自动解析数据格式。上面的例子接受到的数据形如: 1 第一个分类 2 第二个分类 data是一个xml对象,在没有jquery的情况下解析xml是一件很麻烦的事情。但是使用jquery,xml解析起来和html一样。 $(category,data)是查找标签名(tagName)为category节点,返回jquery对象。注意获得节点值用的是text()方法。 还得注意的地方就是url 这里的路径和请求jsp的规则是一样。 2.发送json的例子。$(#btnAddbyjson).click(function () $.ajax( url:/restblog/services/category/add, type:PUT, data:id:1,name:category1, contentType:application/json, success :function (result) alert(result); ,error:function () alert(add category failed!); ););注意type: 通常的ajax调用都只是GET POST 这里用的是PUT,要回过神来。contentType:与服务方法上的Consume 标注属性一样。在ajax调用的时候会在请求的Header添加contentType,application/json的键/值标明发送的数据格式是json。即便发送的数据格式是json,但是真正的数据是以字符串的形式在网络传输的,所以data属性只是json的字符串,由服务器端解析成Category对象。这里的json字符串格式比较严格,不能适用单引号 ,这里要注意。data属性即可以是字符串又可以是json,jquery会根据contentType解析成需要发送的格式。下面的截图是在FireBug下看到的数据发送情况:这张图旨在说明发送的数据不是一个键/值类型。区别与下面的例子。3.POST的表单提交。$(#btnAdd).click(function () $.ajax( url:/restblog/services/category/addbyname, type:POST, data:categoryname:$(#txtName).val(), success :function (result) alert(result); ,error:function () alert(add category failed!); ););addbyname方法的categoryname标识为FormParam 所以用POST提交的数据被当做Form提交
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国家用电动扳手行业市场全景分析及前景机遇研判报告
- 设备装配单位管理制度
- 设计开发评审管理制度
- 2025年中国机器人集成行业市场全景分析及前景机遇研判报告
- 诊所卫生应急管理制度
- 诊所药房员工管理制度
- 试验人员考核管理制度
- 财务费用报销管理制度
- 财政罚款票据管理制度
- 货场淘汰设备管理制度
- 初一几何综合练习题
- DBJ∕T 13-261-2017 福建省二次供水不锈钢水池(箱)应用技术规程
- GB∕T 16422.3-2022 塑料 实验室光源暴露试验方法 第3部分:荧光紫外灯
- 新建区2018年中小学(幼)教师、特岗教师
- 中国历史地理复习资料
- 05示例:玉米脱粒机的设计(含全套CAD图纸)
- 冷库项目施工组织设计方案
- 年中总结会策划方案
- (最新)污水处理池施工方案
- 肺脓肿护理查房ppt课件
- 我要建一座王宫(正谱)
评论
0/150
提交评论