??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产欧美一区二区三区丁香婷,国产精品第二页,女优一区二区三区http://www.aygfsteel.com/Hafeyang/category/37449.html<a style='color:#fff' href='http://www.aygfsteel.com/Hafeyang/archive/2009/02/02/253007.html' >cnblogs=>blogjava&javaeye</a>zh-cnTue, 10 Feb 2009 16:03:01 GMTTue, 10 Feb 2009 16:03:01 GMT60RESTful Web Service(?:使用ajax创徏客户?/title><link>http://www.aygfsteel.com/Hafeyang/archive/2009/02/10/254129.html</link><dc:creator>阌?/dc:creator><author>阌?/author><pubDate>Tue, 10 Feb 2009 13:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/Hafeyang/archive/2009/02/10/254129.html</guid><wfw:comment>http://www.aygfsteel.com/Hafeyang/comments/254129.html</wfw:comment><comments>http://www.aygfsteel.com/Hafeyang/archive/2009/02/10/254129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Hafeyang/comments/commentRss/254129.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Hafeyang/services/trackbacks/254129.html</trackback:ping><description><![CDATA[<p>上个文章中用eclipse创徏的web service。根据rest的思想Q每一个资源都有唯一标识的URI。在REST Web service explorer 中可以看到每个资源的URI?/p> <p>q里攑և一些调用的例子Q?/p> <p>1.geth获得Category xml 数据?/p><pre class="code">$(<span style="color: #2a00ff">"#btncall"</span>).click(<span style="color: #7f0055">function </span>(){ $.ajax({ url:<span style="color: #2a00ff">"/restblog/services/category"</span>, type:<span style="color: #2a00ff">"GET"</span>, <strong>dataType:<span style="color: #2a00ff">'xml'</span></strong>, success :<span style="color: #7f0055">function </span>(data){ <span style="color: #7f0055">var </span>tablehtml=<span style="color: #2a00ff">"<table class='tableresult' border='1' bordercolor='#ccc'><tr><th>~号</th><th>名称</th></tr>"</span>; $(<span style="color: #2a00ff">"category"</span>,data).each(<span style="color: #7f0055">function </span>(i,category){ <span style="color: #7f0055">var </span>id=$(<span style="color: #2a00ff">"id"</span>,category).text(); <span style="color: #7f0055">var </span>name=$(<span style="color: #2a00ff">"name"</span>,category).text(); tablehtml+=(<span style="color: #2a00ff">"<tr><td>"</span>+id+<span style="color: #2a00ff">"</td><td>"</span>+name+<span style="color: #2a00ff">"</td></tr>"</span>); }); tablehtml+=<span style="color: #2a00ff">"</table>"</span>; $(tablehtml).appendTo(<span style="color: #2a00ff">"#result"</span>); },error:<span style="color: #7f0055">function </span>(){ alert(<span style="color: #2a00ff">"get category list failed!"</span>); }}); });</pre> <p>jquery的ajax调用有一个参数dataType是期望得到的数据格式Q目前版本的可选gؓ(f)xml,json,html,jsonp.默认的是html。指定了该属性,jquery?x)自动解析数据格式?/p> <p>上面的例子接受到的数据Ş如:(x)</p> <p><?xml version="1.0" encoding="UTF-8"?> <br>   <Categories> <br>       <category> <br>           <id>1</id> <br>           <name>W一个分c?lt;/name> <br>       </category> <br>       <category> <br>           <id>2</id> <br>           <name>W二个分c?lt;/name> <br>       </category> <br>   </Categories> <p>data是一个xml对象Q在没有jquery的情况下解析xml是一件很ȝ的事情。但是用jqueryQxml解析h和html一栗? <p>$(<span style="color: #2a00ff">"category"</span>,data)是查找标{֐(tagName)为category节点Q返回jquery对象。注意获得节点值用的是text()Ҏ(gu)? <p>q得注意的地方就是url q里的\径和hjsp的规则是一栗? <p>2.发送json的例子?pre class="code">$(<span style="color: #2a00ff">"#btnAddbyjson"</span>).click(<span style="color: #7f0055">function </span>(){ $.ajax({ url:<span style="color: #2a00ff">"/restblog/services/category/add"</span>, <strong>type:<span style="color: #2a00ff">"PUT"</span>,</strong> <strong>data:<span style="color: #2a00ff">"{\"id\":1,\"name\":\"category1\"}"</span>,</strong> <strong>contentType:<span style="color: #2a00ff">'application/json'</span>,</strong> success :<span style="color: #7f0055">function </span>(result){ alert(result); },error:<span style="color: #7f0055">function </span>(){ alert(<span style="color: #2a00ff">"add category failed!"</span>); }}); });</pre> <p>注意type: 通常的ajax调用都只是GET POST q里用的是PUTQ要回过来?/p> <p>contentType:与服务方法上的Consume 标注属性一栗在ajax调用的时候会(x)在请求的Headerd{"contentType","application/json"}的键/值标明发送的数据格式是json?/p> <p>即便发送的数据格式是json,但是真正的数据是以字W串的Ş式在|络传输的,所以data属性只是json的字W串Q由服务器端解析成Category对象。这里的json字符串格式比较严|不能适用单引? ,q里要注意?/p> <p>data属性即可以是字W串又可以是json,jquery?x)根据contentType解析成需要发送的格式?/p> <p>下面的截图是在FireBug下看到的数据发送情况:(x)</p> <p><a href="http://www.aygfsteel.com/images/blogjava_net/Hafeyang/WindowsLiveWriter/RESTfulWebServiceajax_10732/1.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="202" alt="1" src="http://www.aygfsteel.com/images/blogjava_net/Hafeyang/WindowsLiveWriter/RESTfulWebServiceajax_10732/1_thumb.jpg" width="320" border="0"></a> </p> <p>q张图旨在说明发送的数据不是一个键/值类型。区别与下面的例子?/p> <p>3.POST的表单提交?/p><pre class="code">$(<span style="color: #2a00ff">"#btnAdd"</span>).click(<span style="color: #7f0055">function </span>(){ $.ajax({ url:<span style="color: #2a00ff">"/restblog/services/category/addbyname"</span>, type:<span style="color: #2a00ff">"POST"</span>, data:{<span style="color: #2a00ff">'categoryname'</span>:$(<span style="color: #2a00ff">"#txtName"</span>).val()}, success :<span style="color: #7f0055">function </span>(result){ alert(result); },error:<span style="color: #7f0055">function </span>(){ alert(<span style="color: #2a00ff">"add category failed!"</span>); }}); });</pre> <p>addbynameҎ(gu)的categoryname标识为@FormParam 所以用POST提交的数据被当做Form提交的数据。下面的截图说明览器发送的是一个标准的?值数?/p> <p><a href="http://www.aygfsteel.com/images/blogjava_net/Hafeyang/WindowsLiveWriter/RESTfulWebServiceajax_10732/2.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" alt="2" src="http://www.aygfsteel.com/images/blogjava_net/Hafeyang/WindowsLiveWriter/RESTfulWebServiceajax_10732/2_thumb.jpg" width="238" border="0"></a> </p> <p> 4.调用带@Context标识参数的方?/p><pre class="code">$(<span style="color: #2a00ff">"#btncommonProcess"</span>).click(<span style="color: #7f0055">function </span>(){ $.ajax({ url:<span style="color: #2a00ff">"/restblog/services/category/commonProcess"</span>, type:<span style="color: #2a00ff">"GET"</span>, data:<span style="color: #2a00ff">"a=b&a=e&c=d"</span>, success :<span style="color: #7f0055">function </span>(result){ alert(result); },error:<span style="color: #7f0055">function </span>(){ alert(<span style="color: #2a00ff">"commonProcess failed!"</span>); }}); });</pre><a ></a> <p>服务端的代码见上一文章?/p> <p>控制C打印Q?/p> <p>c : [d]<br>a : [b, e]</p> <h3>ȝ</h3> <p>REST Web service 不但提供了标准的调用Ҏ(gu)Q同时拥有非常简便的ajax调用。由于请求的U数据,所以他更适合于ajax调用。而且的客L(fng)可以跨^収ͼ跨应用。他的优势是无可比拟的,我相信他的未来不可估量?/p> <img src ="http://www.aygfsteel.com/Hafeyang/aggbug/254129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Hafeyang/" target="_blank">阌?/a> 2009-02-10 21:34 <a href="http://www.aygfsteel.com/Hafeyang/archive/2009/02/10/254129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RESTful Web Service(?:使用eclipse创徏restful webservice 工程http://www.aygfsteel.com/Hafeyang/archive/2009/02/05/253458.html阌?/dc:creator>阌?/author>Thu, 05 Feb 2009 14:19:00 GMThttp://www.aygfsteel.com/Hafeyang/archive/2009/02/05/253458.htmlhttp://www.aygfsteel.com/Hafeyang/comments/253458.htmlhttp://www.aygfsteel.com/Hafeyang/archive/2009/02/05/253458.html#Feedback0http://www.aygfsteel.com/Hafeyang/comments/commentRss/253458.htmlhttp://www.aygfsteel.com/Hafeyang/services/trackbacks/253458.html使用环境:jdk1.5+eclispe3.4+myeclispe7

File=>New=>Web Service Project?/p>

project name: restblog,选择REST(JAX-RS) 下一步?/p>

Ncore,jaxb,client,json然后下一步?/p>

之所以创建servlet是因Z(x)h一些物理不存在的URIQ事实上是q个servlet在处理这些resource?/p>

jaxb(Java Architecture for XML Binding)可以java class序列hxmlQ请参?a title="http://java.sun.com/developer/technicalArticles/WebServices/jaxb/" >http://java.sun.com/developer/technicalArticles/WebServices/jaxb/

json׃多说了,q个包可以实现java class 转化成json?/p>

点击finish完成工程创徏?/p>

q样创徏的工E与通常的web工程的区别就是添加了servlet在web.xmlQ这里脓(chung)出servlet代码Q后l的文章中也?x)提C?/p>

<servlet>
<display-name>JAX-RS REST Servlet</display-name>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

在工E的classpath下会(x)引用下列包:(x)

11

q些包可以从http://download.java.net/maven/2/com/sun/jersey/ 下蝲(使用maven2)

首先创徏一个简单的cCategory

12

使用@XmlRootElement标注该类

点击13 图标创徏webservice,选择restblog工程QFramework选择REST(JAX-RS)

14

Java class : CategoryService

URL path: 资源路径 填写category ,q样所有与category相关的资源都使用http://yourpath/services/category讉K

LIfecycle: Pre-request(JAX-RS default)每次h时生成一个服务类实例(q里指CategoryService),singleton:单例Q只存在一个实?/p>

Consumes: 接受的contentType 包括application/xml ,application/json 通俗来说是接受提交数据的格式?/p>

Produces: 产生的数据格式选项同样为applicatin/xml,application/json {?br /> 注意q里的Consumes/Produces是指hhttp://yourpath/services/category的数据格式?/p>

点击 Add 按钮d服务Ҏ(gu)Q界面如下:(x)

16

q是一个构造服务方法的界面Q下面有代码预览。在d参数的时候,选择Param Type选项的意义:(x)

Context: q是一个标识该参数求上下文。可以直接获得request的参数?/p>

QueryParam:uri?之后的参?/p>

PathParam:uri中的参数如:(x)/category/{id}中的id是PathParam

FormParam:使用post提交的参数?/p>

CookieParam: Cookie参数?/p>

HeaderParam: h的头部信息?/p>

也许你已l注意到没有session参数Q是的,所谓的"无状态stateless"多少׃现在q里Qweb服务不保存请求相关的信息?/p>

l合上面的用法,下面的例子涵盖了常用的服务方法的写法Q之中的处理q程暂时用硬~码。后面的文章?x)介lHIbernate,Spring的应用?br />

package com.dawnpro.restblog;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;

import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

@Path(
"category")
public class CategoryService {
    
    @GET
    @Produces( {
"application/json","application/xml"})
    
/**
     * getCategories 产生json,xml两种数据格式Q具体那U格式取决于contentType
     
*/
    
public List<Category> getCategories() {
        List
<Category> result =new ArrayList<Category>();
        result.add(
new Category(1,"W一个分c?/span>"));
        result.add(
new Category(2,"W二个分c?/span>"));
        
return result;
    }

    @GET
    @Path(
"{id}")
    
public Category getCategory(@PathParam("id"int id) {
        
return new Category(id,"id?/span>"+id+"的类?/span>");
    }

    
    @GET
    @Path(
"json/{id}")
    @Produces( 
"application/json")
    
public JSONObject getCategoryJson(@PathParam("id"int id){//产生json
        JSONObject o =new JSONObject();
        
try {
            o.put(
"id", id);
            o.put(
"name""id?/span>"+id+"的category");
        } 
catch (JSONException e) {
            e.printStackTrace();
        }
        
return o;
    }
    
    @PUT
    @Path(
"add")
    @Produces(
"text/html")
    @Consumes( { 
"application/xml""application/json" })
    
public String addCategory(Category category) {
        System.out.println(
"处理dcd逻辑Q接受的数据为id:"+category.getId()+",name:"+category.getName());
        
return "ok";
    }
    
    @POST
    @Path(
"addbyname")
    
public String addCategory(@FormParam("categoryname") @DefaultValue("[未命名]") String cateogryname) {
        System.out.println(
"处理dcd逻辑Q接受的数据为name:"+cateogryname);
        
return "dcd"+cateogryname+"成功";
    }

    @POST
    @Produces(
"text/html")
    @Path(
"updatecategory")
    @Consumes( { 
"application/xml""application/json" })
    
public String updateCategory(Category category) {
        System.out.println(
"处理更新cd逻辑Q接受的数据为id:"+category.getId()+",name:"+category.getName());
        
return "ok";
    }

    @DELETE
    @Path(
"delete/{id}")
    
public String deleteCategory(@PathParam("id"int id) {
        System.out.println(
"处理删除cd逻辑Q接受的数据为id:"+id);
        
return "ok";
    }
    
    @GET
    @Path(
"commonProcess")
    
public String commonProcess(@Context UriInfo info){//@Context 参数标识UriInfo
         StringBuilder buf = new StringBuilder();  
         
for (String param: info.getQueryParameters().keySet()) {  
             buf.append(param
+" : "+info.getQueryParameters().get(param));  
             buf.append(
"\n");  
         }  
         System.out.println(buf.toString());
         
        
return "ok";
    }
    
}


你可以在CategoryService.java~辑?右键菜单=>MyEclipse=>Add REST Methodd服务Ҏ(gu)?/font>

右键工程根目录restblog选择MyEclipse=>Test with RESTful WebServices Explorer 会(x)打开试H口?/font>
17 
览中的地址?http://localhost:8080/restblog/services/application.wadl 首先/services是由servlet拦截?/pre>
如果在浏览器中浏览该地址Q将得到一个xml文g。这个文件叫web service application description language。顾名思义他是一个服务描q文件?/pre>
需要说明的是当调用Ҏ(gu)的参Cؓ(f)CategorycdQ调用时传递的是xml同时contentType讄为application/xmlq样jersey?x)将xml转化为Categorycd的对象。如果{化出错则服务调用p|Q会(x)q回错误信息?/pre>

ȝ

本节主要介绍在Myeclipse中创建RESTful web service project 以及(qing)试。到目前为止Q只写了两个cdL的实CRESTful Web service?/pre>
参考资料:(x)
介绍rest:http://java.sun.com/developer/technicalArticles/WebServices/restful/
介绍使用myeclipse rest 支持http://www.myeclipseide.com/documentation/quickstarts/webservices_rest/
RESTful Web Services Developer's Guidehttp://docs.sun.com/app/docs/doc/820-4867?l=zh
netbeans的restful webservice 支持Q?a >http://www.netbeans.org/kb/60/websvc/rest_zh_CN.html


]]>RESTful Web Service(一):概述http://www.aygfsteel.com/Hafeyang/archive/2009/02/05/253430.html阌?/dc:creator>阌?/author>Thu, 05 Feb 2009 10:20:00 GMThttp://www.aygfsteel.com/Hafeyang/archive/2009/02/05/253430.htmlhttp://www.aygfsteel.com/Hafeyang/comments/253430.htmlhttp://www.aygfsteel.com/Hafeyang/archive/2009/02/05/253430.html#Feedback0http://www.aygfsteel.com/Hafeyang/comments/commentRss/253430.htmlhttp://www.aygfsteel.com/Hafeyang/services/trackbacks/253430.html本节介绍sun的RESTful Webservice的实现框架jersey,以及(qing)RESTful Webservice的理论知识。做pd的第一,本节?x)介l后l的内容?/p>

什么是RESTful Web ServicesQ?/h3>

RESTful web services是表象状态传输的web服务。REST的基是适用http创徏一个简单的web服务体系架构。它为http数据传输提供了统一的接口。rest有五个关键性原则:(x)

  • 所有资源都有唯一的URIQ所有的数据都在唯一的URI标识?
  • 所有的事物链接在一P(x)׃是URIQ在M的可能的情况下,适用链接指向被标识的事物?
  • 适用标准Ҏ(gu)Q同一个资源适用不同的verb可以获得不同的结果,在接下来的例子中可以得到验证。这里的verb除了常用的GET和POSTQ还有PUT,DELETE。每一个动词刚好对应着数据库的基本操作QGET对应获取数据Q就是查询;POST对应的更新数据UPDATEQPUT对应着insertQDELETE对应这数据库删除。这L(fng)定义不仅能更语义化动词,更重要的是他定义的一U标准,有了q个标准Q可以跨应用Q跨域,跨系l的调用?
  • 资源的多重表qͼ(x)资源的获取会(x)随着h的head而不同?
  • 无状态通信QREST要求状态要么被攑օ资源状态中Q要么保存在客户端上。换句话_(d)服务端不能保持除了单词请求之外的QQ何与光信的客L(fng)的通信状态。这样做的理׃是可伸羃性,他可以服务端的变化对客L(fng)是不可见的?/li>

jersey介绍

jersey是sun的RESTful web service实现。他使用jdk5的新特征anotation。其参考站Ҏ(gu)https://jersey.dev.java.net/其他的参考资料:(x)

rest介绍Q?a >http://www.infoq.com/cn/articles/rest-introduction

下面几个家伙是jersey的开发?/p>

?Earthly Powers, by Paul Sandoz, at http://blogs.sun.com/japod/category/REST.

 

本系列烦引:(x)

使用eclipse创徏restful webservice 工程?/p>

]]>
վ֩ģ壺 | | SHOW| | ˷| | | ̨| | | | ʡ| | ӳ| ຣʡ| Զ| | ڰ| ƽ| | | ͨ| | ٤ʦ| | | ͨ| ľ| ƺ| ˻| ˮ| 㽭ʡ| | | | µ| | | | | |