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

    主站蜘蛛池模板: 狠狠亚洲狠狠欧洲2019| 久久亚洲精品中文字幕三区| 精品国产麻豆免费网站| 丝袜熟女国偷自产中文字幕亚洲| 亚洲国产电影在线观看| 一级做a爰片久久毛片免费看| 亚洲美女免费视频| 国产精品亚洲产品一区二区三区| 亚洲福利电影在线观看| 亚洲免费无码在线| 在线免费观看视频你懂的| 亚洲一区中文字幕久久| 一区视频免费观看| 亚洲国产综合无码一区| 国产亚洲视频在线| 成人超污免费网站在线看| 亚洲AV日韩AV天堂久久| 一级毛片成人免费看a| 亚洲一区二区高清| AAA日本高清在线播放免费观看| 亚洲av手机在线观看| 久久久久久久久亚洲 | 亚洲AV无码国产一区二区三区| 一区二区三区四区免费视频 | a毛片久久免费观看| 日韩免费毛片视频| 美女视频黄免费亚洲| 亚洲一级免费毛片| 亚洲av无码国产精品夜色午夜| 中文在线观看永久免费| 亚洲另类少妇17p| 青青草97国产精品免费观看| 日本不卡免费新一二三区| 一级毛片在播放免费| 久久精品国产精品亚洲毛片| 免费黄色app网站| 中国在线观看免费的www| 亚洲小说图片视频| 国产在线a免费观看| 精品亚洲国产成人| 毛片a级毛片免费播放100|