天天看點

利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service

一、關于RESTful架構

REST這詞是Roy Thomas Fielding在他2000年的博士論文中提出的。他利用REST定義了網際網路軟體的架構原則,即Representational State Transfer縮寫,直譯過來就是“表現層狀态轉化”,如果一個架構符合REST原則,就稱它為RESTful架構。REST所指向的是在網際網路中資源屬性,其指明的是“Resources”的表現層,即概括成就是可以利用REST原則建構API能夠找到獨一無二的“資源實體”,如圖檔、音頻、特定的資料等。簡單概述RESTful架構有以下幾個重點:

1.每一個URI代表一種資源;
2.用戶端和伺服器之間,傳遞這種資源的某種表現層;
3.用戶端通過四個HTTP動詞(GET、POST、PUT、DELETE)對伺服器端資源進行操作,實作“表現層狀态轉化”。
具體的可以看建構實作的例子。
           

二、關于Jersey、Maven

Jersey是JAX-RS(The Java API for RESTful Web Service)标準的參考實作,是Java領域中最純正的REST服務開發架構。

Apache Maven是一款軟體項目管理和了解工具。基于項目對象模型(POM)的概念,Maven可以從中央資訊管理項目的建構,報告和文檔。

三、具體實踐

1.依賴環境JDK、Maven、Tomcat

安裝JDK和Maven時候需要注意的配置環境變量的問題,這其中需要注意的是下載下傳的Maven和Tomcat都是需要時Binary 包,這樣就可以直接解壓後就可以直接運作無需編譯:

1.1.mac環境下:

可以利用vim ~/.bash_profile來配置JDK和Maven的環境變量PATH,配置完成後執行source ~./bash_profile來讓配置檔案生效

#JDK
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
#Maven
export M2_HOME=/Users/bing/apache-maven-3.5.22
export PATH=$PATH:$M2_HOME/bin
           

驗證是否配置好,可以在terminal上面輸入mvn -v指令看,系統是否識别如下圖:

利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service
1.2.Windows環境下:可以通過進階系統設定來配置環境變量

2.利用mvn指令來建立webapp的例子(以mac環境下為例)

sudo mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
                -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
                -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
                -DarchetypeVersion=2.26
           
利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service
cd simple-service-webapp
sudo mvn clean package
           
利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service

這樣就已經把剛才建構基于maven所建構的Jersey RESTful Web Service的war就已經同mvn建構好了

如下圖

利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service

3.啟動Tomcat來釋出此Web Service項目

在Apache Tomcat下載下傳Binary的包後,通過Terminal終端進入Tomcat的bin目錄下

bash startup.sh
           
利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service

如此便是已經将web service部署到了Tomcat中了,并且已經釋出了

這樣就可以通過URI來通路我們的項目資源,如在原來的項目中所需要留意的兩個地方是,第一個是webapp檔案夾下web.xml,如下圖

利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service
<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</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.example</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>
           

其中的

<url-pattern>/webapi/*</url-pattern>

中webapi就是通路路徑一個名字,

第二個是項目中具體的java類所定義接口的中path路徑,在此項目中就是MyResource.java

@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}
           

是以上手的樣例所要通路的URI是:

http://localhost:8080/simple-service-webapp/webapi/myresource/

利用Tomcat釋出基于Maven所建構的Jersey RESTful Web Service

這樣就可以開始項目具體業務的開發了。

後續會繼續完善Windows和Linux版本的環境的搭建,以及基于Docker容器項目部署。