javascript
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
代碼中的注解(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
在Eclipse中運行該類,控制臺上打印“服務已啟動”字樣,表示系統啟動成功,打開瀏覽器,輸入:http://localhost:9876/hello,即可看到效果,如下圖所示:
讓功能再強一點點?
接下來,我們要讓服務能夠接受參數,并根據參數打印不同的信息,最簡單的就是回顯(Echo)。為了實現這一功能,我們給HelloService類增加一個方法:
[java]?view plaincopy
@POST表明該方法要用HTTP Post來訪問,@Path表明訪問該方法的相對路徑是echo,@Consumes表明該方法處理HTTP Post請求中何種類型的數據。該方法參數中的注解@FormParam("msg")說明后面的“String message”參數取自表單提交數據中的msg。
由于該方法需要Post訪問,且需要通過表單提交數據,所以我們創建一個test.htm,在其中寫一個簡單的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
總結
以上是生活随笔為你收集整理的JSR311发布Restful WebService工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国家电网安规专业外包必须双签发吗
- 下一篇: 乐姓是怎么读的?