REST以其簡潔的模式被越來越多的web服務採用和實現,並出現了很多框架,Jersey是其中優秀代表。
Jersey擴展了JAX-RS 參考實現, 提供了更多的特性和工具, 可以進一步地簡化 RESTful service 和 client 開發。儘管相對年輕,但已經是一個產品級的 RESTful service 和 client 框架。
需要做一個RESTful架構的web服務,結構爲IntelliJ + Tomcat + Maven + Jersey。(注:這裏的Intellij需要用 Ultimate版本)
1、新建項目
使用Intellij新建工程,選擇Java Enterprise=>RESTful Web Service,下邊的Libraries選擇Setup Library Later,方便後邊我們用Maven管理Jersey包。如圖:
2、添加框架支持
這裏我們要添加web application
和Maven
的支持。在項目名稱上右鍵=》Add Frameworks Support
,選中Web Application
和Maven
,前者會添加web文件夾,裏邊包括web-inf
和web.xml
,後者會添加pom.xml
。
此時項目目錄看着應該是這個樣子的,在pom.xml
中修改自己的groupID
。
3、配置Tomcat服務
Run=》Run...=》Edit Configurations
對Tomcat進行配置,默認應該已經有一個,沒有的話自己添加。
如果沒有特殊需求的話,這裏只需要改一個warning,根據下方提示Fix部署的問題,可以保持默認直接apply,然後運行Tomcat就可以了。
此時打開的http://localhost:8080/
頁面是空的,編輯一下index.jsp
,裏邊隨便添點東西,就可以顯示出來了。
3、添加REST環境支持
修改pom.xml
文件,添加jersey
的依賴。找了下,新版的release是2.23。可以在這裏找,可以直接複製粘貼。
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.containers/jersey-container-servlet -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.23</version>
</dependency>
完成後會自動下載對應的依賴,如果沒有開啓自動導入,用View=》Tool Windows=》Maven Projects
打開Maven試圖,compile一下就行了。
接下來需要把項目依賴的lib發佈到WEB-INFO/lib
下,選擇File=》Project Structure...
,然後按照下圖所示操作,全選包,Put into /WEB-INF/lib
,然後apply
即可。
4、添加測試
(1)在src/main/java
下新建一個Java文件,這裏放在com.test包裏。
@Path("hello")
public class HelloJsersy {
@GET
@Produces("text/plain")
public String getString(){
return "hello jersey";
}
@GET
@Path("{username}")
@Produces("text/plain")
public String getParam(@PathParam("username")String username){
return "hello "+username;
}
}
第一個函數getString()
沒有再指定@Path
,直接響應hello
,訪問頁面時將返回字符串hello jersey
;第二個函數getParam()
指定了@Path
,響應hello/{username}
,其中{username}
爲地址傳過來的參數。例如使用hello/tom
訪問就返回字符串hello tom
。
(2)修改web.xml文件
這裏是添加jersey
的處理,添加以下內容:
<servlet>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
這裏的<param-value>com.test</param-value>
就是我們最終提供RESTful服務代碼所在的包名。
OK,現在重啓一下Tomcat,訪問http://localhost:8080/test/hello
就可以看到hello jersey
了
中文亂碼處理
以上雖然搭建好環境,但是用瀏覽器訪問的時候中文顯示亂碼。
(1)修改Tomcat默認編碼
修改Tomcat目錄下conf/server.xml文件
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
……
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
給其中的Connector添加上utf8編碼URIEncoding="UTF-8"
,最後類似於:
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
……
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
重啓Tomcat,即可正常顯示頁面中的中文;
(2)爲Jersey指定編碼
這個也很簡單,在@Produces裏指定就好了,類似於:
@Produces("application/json;charset=utf8")
OK!