<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 衡鋒 閱讀(23587) 評論(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)
    這是什么原因  回復  更多評論   

    主站蜘蛛池模板: 国产偷国产偷亚洲高清在线| 亚洲精品天堂在线观看| 中文日本免费高清| 精品国产人成亚洲区| 国产99久久久国产精免费| 亚洲日本一区二区三区在线| 99精品免费视频| 亚洲电影国产一区| 1000部拍拍拍18勿入免费视频下载| 亚洲美女视频网站| 97在线观看永久免费视频| 亚洲日本久久一区二区va| 成人一a毛片免费视频| 亚洲av无码成人精品区一本二本| 日韩亚洲精品福利| 中文字幕无码免费久久9一区9| 久久亚洲精品成人综合| 久久久久av无码免费网| 亚洲日韩精品无码专区| 亚洲国产精品综合久久网络| 国产精品免费大片一区二区| 精品亚洲成a人片在线观看少妇| 无人在线直播免费观看| 无码日韩人妻AV一区免费l| 国产成人精品日本亚洲网站| 无码区日韩特区永久免费系列| 亚洲暴爽av人人爽日日碰| 亚洲综合区小说区激情区| 57pao一国产成永久免费| 日韩欧美亚洲中文乱码| 国内精品久久久久久久亚洲| 大地影院MV在线观看视频免费| 亚洲国产成人精品久久| 亚洲国产婷婷香蕉久久久久久| 中文字幕久精品免费视频| 亚洲一区免费视频| 国产亚洲av片在线观看16女人 | 伊伊人成亚洲综合人网7777| 91香焦国产线观看看免费| 国产成人亚洲综合在线| 亚洲精品视频在线|