<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我是FE,也是Fe

    前端來源于不斷的點滴積累。我一直在努力。

    統計

    留言簿(15)

    閱讀排行榜

    評論排行榜

    RESTful Web Service(二):使用eclipse創建restful webservice 工程

    使用環境:jdk1.5+eclispe3.4+myeclispe7

    File=>New=>Web Service Project。

    project name: restblog,選擇REST(JAX-RS) 下一步。

    勾選core,jaxb,client,json然后下一步。

    之所以創建servlet是因為會請求一些物理不存在的URI,事實上就是這個servlet在處理這些resource。

    jaxb(Java Architecture for XML Binding)可以將java class序列號成xml,請參考http://java.sun.com/developer/technicalArticles/WebServices/jaxb/

    json就不多說了,這個包可以實現java class 轉化成json。

    點擊finish完成工程創建。

    這樣創建的工程與通常的web工程的區別就是添加了servlet在web.xml,這里貼出servlet代碼:后續的文章中也會提到他。

    <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>

    在工程的classpath下會引用下列包:

    11

    這些包可以從http://download.java.net/maven/2/com/sun/jersey/ 下載(使用maven2)

    首先創建一個簡單的類Category

    12

    使用@XmlRootElement標注該類

    點擊13 圖標創建webservice,選擇restblog工程,Framework選擇REST(JAX-RS)

    14

    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 按鈕添加服務方法,界面如下:

    16

    這是一個構造服務方法的界面,下面有代碼預覽。在添加參數的時候,選擇Param Type選項的意義:

    Context: 這是一個標識該參數為請求上下文。可以直接獲得request的參數。

    QueryParam:uri?之后的參數

    PathParam:uri中的參數如:/category/{id}中的id就是PathParam

    FormParam:使用post提交的參數。

    CookieParam: Cookie參數。

    HeaderParam: 請求的頭部信息。

    也許你已經注意到沒有session參數,是的,所謂的"無狀態stateless"多少就體現在這里,web服務不保存請求相關的信息。

    綜合上面的用法,下面的例子涵蓋了常用的服務方法的寫法,之中的處理過程暫時用硬編碼。后面的文章會介紹HIbernate,Spring的應用。

    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兩種數據格式,具體那種格式取決于contentType
         
    */
        
    public List<Category> getCategories() {
            List
    <Category> result =new ArrayList<Category>();
            result.add(
    new Category(1,"第一個分類"));
            result.add(
    new Category(2,"第二個分類"));
            
    return result;
        }

        @GET
        @Path(
    "{id}")
        
    public Category getCategory(@PathParam("id"int id) {
            
    return new Category(id,"id為"+id+"的類別");
        }

        
        @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為"+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(
    "處理添加類別邏輯,接受的數據為id:"+category.getId()+",name:"+category.getName());
            
    return "ok";
        }
        
        @POST
        @Path(
    "addbyname")
        
    public String addCategory(@FormParam("categoryname") @DefaultValue("[未命名]") String cateogryname) {
            System.out.println(
    "處理添加類別邏輯,接受的數據為name:"+cateogryname);
            
    return "添加類別"+cateogryname+"成功";
        }

        @POST
        @Produces(
    "text/html")
        @Path(
    "updatecategory")
        @Consumes( { 
    "application/xml""application/json" })
        
    public String updateCategory(Category category) {
            System.out.println(
    "處理更新類別邏輯,接受的數據為id:"+category.getId()+",name:"+category.getName());
            
    return "ok";
        }

        @DELETE
        @Path(
    "delete/{id}")
        
    public String deleteCategory(@PathParam("id"int id) {
            System.out.println(
    "處理刪除類別邏輯,接受的數據為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 Method添加服務方法。

    右鍵工程根目錄restblog選擇MyEclipse=>Test with RESTful WebServices Explorer 將會打開測試窗口。
    17 
    瀏覽中的地址為:http://localhost:8080/restblog/services/application.wadl 首先/services是由servlet攔截。
    如果在瀏覽器中瀏覽該地址,將得到一個xml文件。這個文件叫web service application description language。顧名思義他是一個服務描述文件。
    需要說明的是當調用方法的參數為Category類型,調用時傳遞的是xml同時contentType設置為application/xml這樣jersey會將xml轉化為Category類型的對象。如果轉化出錯則服務調用失敗,會返回錯誤信息。

    總結

    本節主要介紹在Myeclipse中創建RESTful web service project 以及測試。到目前為止,只寫了兩個類就輕松的實現了RESTful Web service。
    參考資料:
    介紹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 支持:http://www.netbeans.org/kb/60/websvc/rest_zh_CN.html

    posted on 2009-02-05 22:19 衡鋒 閱讀(23584) 評論(7)  編輯  收藏 所屬分類: restful webservice

    評論

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程 2009-06-04 22:27 solomonchan

    對你那篇《使用eclipse創建restful webservice 工程》有幾個問題不是很明白,想向請教你,在這里不好說,能告訴我你的QQ或MSN號嗎?
    我的郵箱是 solomonchan@foxmail.com  回復  更多評論   

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程[未登錄] 2009-11-22 23:39 Joe

    JDK1.6會報錯:java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/Tomcat%206.0/webapps/restblog/WEB-INF/lib/jaxb-impl-2.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)


    nnd,真頭疼.  回復  更多評論   

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程[未登錄] 2010-12-03 09:23 apple

    JDK1.6會報錯:java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/Tomcat%206.0/webapps/restblog/WEB-INF/lib/jaxb-impl-2.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)


    這個問題解決了嘛?能分享一下嗎?小弟也遇到這個問題,謝謝!  回復  更多評論   

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程 2013-06-04 16:11 tb

    剛好用上 ·  回復  更多評論   

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程[未登錄] 2013-08-28 17:45 螞蟻

    為什么我按照你的方式,部署起服務出現: StandardWrapper.Throwable
    com.sun.jersey.spi.inject.Errors$ErrorMessagesException  回復  更多評論   

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程[未登錄] 2013-08-28 17:46 螞蟻

    希望樓主解答一下,真的很疑惑,剛剛開始學習這個,謝謝嘍  回復  更多評論   

    # re: RESTful Web Service(二):使用eclipse創建restful webservice 工程 2015-11-22 13:36 pitera

    樓主請問下 我點擊“Test with REST Web Services Explorer”的時候提示
    The REST explorer is only available on Windows 32,Linux and mac OS x(Carbon)
    這是什么原因  回復  更多評論   

    主站蜘蛛池模板: 成人性生交大片免费看中文| 久久久久久久久久久免费精品| 91福利视频免费| 久久亚洲AV成人出白浆无码国产| 国产精品成人免费观看| 奇米影视亚洲春色| 免费a级毛片无码a∨免费软件| 国产亚洲精品激情都市| 中文无码日韩欧免费视频| 亚洲精品夜夜夜妓女网| 久久综合九色综合97免费下载| 亚洲日本中文字幕| 免费三级毛片电影片| 日韩亚洲产在线观看| 国产v片免费播放| 国产免费牲交视频免费播放| 色久悠悠婷婷综合在线亚洲| 18禁在线无遮挡免费观看网站| 亚洲国产精品久久久天堂| 亚洲视频免费在线播放| 久久精品国产亚洲av麻豆蜜芽| 日韩激情无码免费毛片| a级毛片免费观看网站| 亚洲成AV人片在线播放无码| 色欲色香天天天综合网站免费 | 亚洲黄黄黄网站在线观看| 国产免费区在线观看十分钟 | 亚洲国产电影在线观看| 成人毛片手机版免费看| 污视频网站免费在线观看| 久久国产亚洲精品麻豆| 国产成人精品免费视频动漫| 亚洲日本一线产区和二线 | 国产在线播放免费| 青青操免费在线观看| 亚洲一区二区三区国产精品无码| 国产又粗又长又硬免费视频| 一区二区三区无码视频免费福利 | 久久久久亚洲AV无码麻豆| 四虎影院免费在线播放| 东方aⅴ免费观看久久av|