利用Tomcat發佈基於Maven所構建的Jersey RESTful Web Service

1、關於RESTful架構

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

1.每個URI表明一種資源;
2.客戶端和服務器之間,傳遞這種資源的某種表現層;
3.客戶端經過四個HTTP動詞(GET、POST、PUT、DELETE)對服務器端資源進行操做,實現「表現層狀態轉化」。
具體的能夠看構建實現的例子。

2、關於Jersey、Maven

Jersey是JAX-RS(The Java API for RESTful Web Service)標準的參考實現,是Java領域中最純正的REST服務開發框架。
Apache Maven是一款軟件項目管理和理解工具。基於項目對象模型(POM)的概念,Maven能夠從中央信息管理項目的構建,報告和文檔。java

3、具體實踐

1.依賴環境JDK、Maven、Tomcat

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

1.1.mac環境下:

能夠利用vim ~/.bash_profile來配置JDK和Maven的環境變量PATH,配置完成後執行source ~./bash_profile來讓配置文件生效apache

#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命令看,系統是否識別以下圖:vim

clipboard.png

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

clipboard.png

cd simple-service-webapp
sudo mvn clean package

clipboard.png
這樣就已經把剛纔構建基於maven所構建的Jersey RESTful Web Service的war就已經同mvn構建好了
以下圖
clipboard.pngapi

3.啓動Tomcat來發布此Web Service項目

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

bash startup.sh

clipboard.png
如此即是已經將web service部署到了Tomcat中了,而且已經發布了
這樣就能夠經過URI來訪問咱們的項目資源,如在原來的項目中所須要留意的兩個地方是,第一個是webapp文件夾下web.xml,以下圖
clipboard.png服務器

<?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/app

clipboard.png

這樣就能夠開始項目具體業務的開發了。


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

相關文章
相關標籤/搜索