日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSR311发布Restful WebService工程

發布時間:2024/10/8 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSR311发布Restful WebService工程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景知識?
Representational state transfer (REST) Web Service:?
它是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。在目前三種主流的Web Service實現方案中,因為REST與SOAP和XML-RPC相比顯的更加簡潔,因此越來越多的Web Service開始采用REST風格設計和實現。

參考資料:http://en.wikipedia.org/wiki/Representational_State_Transfer

Jersey:?
它是Sun對JSR311的官方參考實現,而JSR311是java中實現Restful Web Service的API規范(JSR311: JAX-RS: The Java API for RESTful Web Services)。JSR311有一個重要目標:使用注解(annotation)把POJO暴露成Web Service,這樣就比較輕量級。

參考資料:https://jsr311.dev.java.net/nonav/releases/1.0/spec/index.html

Grizzly:?
Grizzly于2004年誕生在GlassFish中,開始目的是要建構一個HTTP Web服務器,用來代替Tomcat的Coyote連接器和Sun WebServ er6.1。后來,Grizzly成為一種應用程序框架,專門解決編寫成千上萬用戶訪問服務器時候產生的各種問題。使用JAVA NIO作為基礎,并隱藏其編程的復雜性。在本例中,我們將其用作內嵌的Servlet Container。

參考資料:https://grizzly.dev.java.net/

準備工作?
首先,下載grizzly和jersey。其中,grizzly的下載地址為:http://download.java.net/maven/2/com/sun/grizzly/grizzly-servlet-webserver/1.9.18a/grizzly-servlet-webserver-1.9.18a.jar,jersey的下載地址為:http://download.java.net/maven/2/com/sun/jersey/jersey-archive/1.1.2-ea/jersey-archive-1.1.2-ea.zip

在Eclipse中建一個Java工程,名為jsr331,然后把下載的jersey-archive-1.1.2-ea.zip解壓,將jersey-archive-1.1.2-ea/contribs、jersey-archive-1.1.2-ea/lib兩個目錄下的jar包,連同下載的grizzly-http-webserver-1.9.18a.jar都拷貝到jsr331工程下的lib目錄,并加入到該工程的Build Path。(實測中,發現還需要引入一個包,下載地址:http://repository.jboss.org/maven2/org/jvnet/mimepull/1.2/mimepull-1.2.jar)

編寫最簡單的服務?
JSR331把準備提供Web Service的類稱為Resource class。Resource class是一個普通類(POJO),但是按照規范要求增加了特定的注解(annotation)。我們首先實現最簡單的hello world服務。

在jinxfei.test.jsr311.service下,建立HelloService類,內容如下:

[java]?view plaincopy
  • package?jinxfei.test.jsr311.service;??
  • ??
  • import?javax.ws.rs.GET;??
  • import?javax.ws.rs.Path;??
  • import?javax.ws.rs.Produces;??
  • ??
  • @Path("/hello")??
  • public?class?HelloService?{??
  • ????@GET???
  • ????@Produces("text/plain")??
  • ????public?String?helloWorld(){??
  • ????????return?"Hello?world!";??
  • ????}?????
  • }??
  • 代碼中的注解(annotation)決定了程序發布成Web Service后的行為和特性。其中,HelloService類前面的@PATH,表明該Service的URL路徑,這種類名前面帶@PATH注解的類被稱為Root Resource Class,因為他們決定了訪問Service時URI中的第一級路徑;@GET表示訪問該服務使用HTTP GET方法;@Produces規定該服務返回結果的類型,這里的”text/plain”表名返回純文本。

    發布服務?
    實現服務類后,我們要啟動一個內嵌的grizzly servlet container,并把HelloService發布到該Container中,這樣就能通過HTTP協議訪問該服務。Jersey提供了兩種發布方式,標準的做法需要在web.xml中做配置,所以比較適用于部署在獨立的Web Container下的應用,本文不做深入介紹,可參見:http://docs.sun.com/app/docs/doc/820-4867/6nga7f5o4?l=en&a=view。本例與grizzly整合,所以使用grizzly的工具類,通過代碼進行部署配置。

    在jinxfei.test.jsr311包下創建ServiceDeployer類,內容如下:

    [java]?view plaincopy
  • package?jinxfei.test.jsr311;??
  • ??
  • import?java.io.IOException;??
  • import?java.net.URI;??
  • import?java.util.HashMap;??
  • import?java.util.Map;??
  • import?javax.ws.rs.core.UriBuilder;??
  • import?com.sun.grizzly.http.SelectorThread;??
  • import?com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory;??
  • ??
  • public?class?ServiceDeployer?{??
  • ??????
  • ????public?static?void?main(String[]?args)?throws?IOException?{??
  • ????????URI?ServerURI=UriBuilder.fromUri("http://localhost/").port(9876).build();??
  • ????????startServer(ServerURI);??
  • ????????System.out.println("服務已啟動,請訪問:"+ServerURI);??
  • ????}??????
  • ??????
  • ????protected?static?SelectorThread?startServer(URI?serverURI)?throws?IOException?{??
  • ????????final?Map<String,?String>?initParams?=?new?HashMap<String,?String>();??
  • ????????initParams.put("com.sun.jersey.config.property.packages","jinxfei.test.jsr311.service");??
  • ????????System.out.println("Grizzly?啟動中...");??
  • ????????SelectorThread?threadSelector?=?GrizzlyWebContainerFactory.create(serverURI,?initParams);???????
  • ????????return?threadSelector;??
  • ????}??????
  • }??
  • 代碼很簡單,其中:initParams.put("com.sun.jersey.config.property.packages" , "jinxfei.test.jsr311.service"); 這一行的第二個參數表明服務實現類所在的包名,系統會自動搜索做了注解的類并將其發布成服務。

    在Eclipse中運行該類,控制臺上打印“服務已啟動”字樣,表示系統啟動成功,打開瀏覽器,輸入:http://localhost:9876/hello,即可看到效果,如下圖所示:

    讓功能再強一點點?
    接下來,我們要讓服務能夠接受參數,并根據參數打印不同的信息,最簡單的就是回顯(Echo)。為了實現這一功能,我們給HelloService類增加一個方法:

    [java]?view plaincopy
  • @POST?@Path("echo")??
  • ????@Consumes("application/x-www-form-urlencoded")??
  • ????public?String?echo(@FormParam("msg")?String?message){??
  • ????????return?"Are?you?saying:"+message;??
  • ????}??
  • @POST表明該方法要用HTTP Post來訪問,@Path表明訪問該方法的相對路徑是echo,@Consumes表明該方法處理HTTP Post請求中何種類型的數據。該方法參數中的注解@FormParam("msg")說明后面的“String message”參數取自表單提交數據中的msg。

    由于該方法需要Post訪問,且需要通過表單提交數據,所以我們創建一個test.htm,在其中寫一個簡單的Form:

    [xhtml]?view plaincopy
  • <form?action="http://localhost:9876/hello/echo"?method="post">??
  • <input?type="text"?name="msg">??
  • <input?type="submit"?value="submit">??
  • </form>??
  • 重啟ServiceDeployer,然后在瀏覽器中打開test.htm,表單中輸入任意信息:?

    然后點提交按鈕,可以看到如下信息:?

    這說明HelloService已經提取了表單參數,并回顯給用戶。

    深入學習?
    請參考官方資料:?
    JSR311規范:https://jsr311.dev.java.net/nonav/releases/1.0/spec/index.html?
    JSR311參考實現的主要特性:http://wikis.sun.com/display/Jersey/Overview+of+JAX-RS+1.0+Features

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的JSR311发布Restful WebService工程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 麻豆亚洲av熟女国产一区二 | 久久久久在线观看 | 国产精品一二区在线观看 | 丰满少妇高潮在线观看 | 无码人妻精品一区二区三区蜜桃91 | 国产成人精品免高潮费视频 | 亚洲大尺度av | 丁香婷婷社区 | 午夜精品一区二区在线观看 | 一级片在线免费看 | 一级久久| 欧美电影一区二区三区 | 亚洲国产精品一区二区三区 | 国产精品视频大全 | 免费人成在线观看视频播放 | 成人影视免费观看 | 国内成人精品 | 乌克兰毛片 | av尤物| 国产免费一区二区三区 | av草逼| 日本激情网址 | 久久国语精品 | 极品探花在线观看 | 欧美美女性高潮 | 日本三级理论片 | 成人毛片一区二区三区 | 日韩av午夜| 日本东京热一区二区 | 精品久久精品 | 琪琪午夜伦理影院7777 | 国产欧美精品久久 | 婷婷在线免费观看 | 一区二区三区视频免费 | 欧美亚洲另类在线 | 国产农村乱对白刺激视频 | 在线视频亚洲色图 | 黄色香蕉网站 | 国产白浆一区二区 | 亚洲福利在线观看 | 亚洲国产精品二区 | 久久国产精彩视频 | 国产精品香蕉国产 | 嫩草影院av | 国产嫩bbwbbw高潮 | 日韩中文字幕高清 | 在线播放精品视频 | 热久久久久久久 | 亚洲小说图片区 | 国产精品第9页 | 欧美大片www| 人妻人人澡人人添人人爽 | 亚洲情se | 国产超碰人人模人人爽人人添 | 一级做a爱视频 | 老湿影院av| 亚洲精选中文字幕 | 性国产精品 | 天天插插插 | 青少年xxxxx性开放hg | 在线看的免费网站 | 久草免费福利视频 | 中文字幕+乱码+中文 | www.xxx.日本 | 久久9999久久免费精品国产 | 伊人色在线 | 一级黄色播放 | 黄污视频在线播放 | 国产无码精品在线播放 | 女儿的朋友4在线观看 | 黄色大片在线免费观看 | 荷兰av| 97国产免费 | 麻豆视频在线看 | 婷婷丁香一区二区三区 | 国产日韩欧美在线观看 | 最近中文字幕第一页 | 97超碰人 | av黄色免费观看 | 亚州中文字幕 | 欧美日韩tv | 少妇理论片 | 成年人的黄色片 | 91高清无打码 | 日韩在线精品视频 | 天堂成人国产精品一区 | 一卡二卡三卡 | 久久久久久久久久久久久久久久久久久 | 欧美日韩精品一区二区三区四区 | 另类欧美尿交 | 久久人人看 | 嫩操影院 | 黄色片在线免费看 | 国产91一区在线精品 | 另类小说亚洲色图 | 欧美色就是色 | 最新理伦片eeuss影院 | 成人在线观看h | 91精品国产综合久久福利软件 |