在本文中,我們將設定一個執行 Java EE 應用程式的工作環境。讓我提醒您:在前面的資料中,我們介紹了Java EE的基礎知識。 我們所說的環境是指一組不同的軟體元件:
- Java EE SDK;
- Java EE 應用程式伺服器 GlassFish;
- 設定 IntelliJ IDEA。
- 展示如何準備使用 Java EE 應用程式的工作環境。
- 展示如何在 GlassFish 伺服器上從 IntelliJ IDEA 部署和運行 Java EE 應用程式。
- 下載並安裝 Java EE 7 SDK。
- 讓我們提出 Java EE 應用程式伺服器 GlassFish。
- 讓我們學習如何透過命令列啟動和停止伺服器。
- 讓我們配置 IntelliJ IDEA 以將應用程式部署到該伺服器。
- 讓我們部署並運行演示應用程序,該應用程式與 GlassFish 應用程式伺服器一起包含在 Java EE 7 SDK 中。
- 玻璃魚4.0;
- IntelliJ IDEA 2019.3.1(旗艦版);
- Java EE SDK 7。
安裝 Java EE SDK
重要條件。在安裝 Java EE SDK 之前,必須確保已預先安裝 Java SE SDK。-
首先,我們需要下載SDK。為此,您可以在搜尋引擎中輸入:“Java EE SDK 7”,或直接從 Oracle 網站前往sdk 下載頁面。
-
您需要從提供的 SDK 清單中選擇適合您平台的 SDK。本文介紹了安裝發行版:“java_ee_sdk-7-jdk7-windows-x64-ml.exe”
-
運行安裝檔。啟動過程中,可能會出現以下錯誤(如果沒有出現,則可以繼續安裝):
這意味著安裝程式無法找到預先安裝的 Java 執行時間環境的路徑。可以透過使用命令列手動將路徑傳遞到 JRE 來修正該錯誤。為此,您需要透過 PowerShell 執行安裝文件,並透過 -j 參數傳遞預先安裝 JRE 的路徑。
例如,像這樣:
-
對於大多數程式來說,進一步的安裝過程是非常典型的。您所需要做的就是點擊“下一步”和“安裝”按鈕。
該程式將安裝 Java EE SDK 以及 GlassFish 伺服器,安裝完成後,伺服器將啟動並可供使用。 -
為了確保 GlassFish 伺服器正常運作,安裝完成後,您可以開啟伺服器管理面板,該面板位於: http://localhost:4848/
截圖如下:
透過命令列啟動和停止 GlassFish
因此,伺服器已啟動並正在運行,但伺服器啟動是由安裝程式啟動的。下面我們將嘗試弄清楚如何自己啟動和停止伺服器。首先,讓我們揭示一個域這樣的實體。 網域是由一個管理伺服器管理的一組一個或多個 GlassFish 伺服器實例。安裝 GlassFish 伺服器時,會建立一個預設網域 - domain1。以下組件與其關聯:- 伺服器連接埠(預設8080);
- 管理伺服器連接埠(預設4848);
- 管理員使用者名稱和密碼(預設為admin,預設不需要密碼)。
asadmin start-domain domain_name
asadmin stop-domain domain_name
讓我們嘗試透過從子目錄C:\glassfish4\glassfish\bin執行 PowerShell 來停止伺服器(因為它在安裝後已經在運行) : 伺服器已停止。現在讓我們運行它:
我們分析第一個 Java EE 應用程式 dukes-age
接下來我們將看一個示範 Java EE 應用程式:dukes-age。該應用程式與第一個 cup 應用程式一起包含在 Java EE SDK 中。這些應用程式的描述位於 Oracle 官方文件網站上針對Java EE 初學者的 Java EE 入門課程的第 3 節和第 4 節。在本文中,我們將簡要介紹 dukes-age 應用程序,並更詳細地研究從 IntelliJ IDEA 開發環境在 GlassFish 伺服器上啟動該應用程式的過程。該應用程式位於 glassfish 伺服器目錄內。如果您在安裝 Java EE SDK 時沒有更改 glassfish 伺服器的預設路徑,則可以在資料夾中找到此應用程式:C:\glassfish4\docs\firstcup\example\dukes-age。或許每個Java開發人員,無論是初學者或經驗豐富的人,都至少看過一次Java程式語言的吉祥物-Duke: 很少人知道Duke有生日。他出生於 1995 年 5 月 23 日,當時 Java 技術的第一個演示版本發布。公爵年齡應用程序,顧名思義,提供有關杜克年齡的資訊。讓我們在 IntelliJ IDEA 中開啟此應用程式:File -> New -> Project From Existing Sources... 然後前往包含 dukes-age 應用程式的資料夾,預設位於C:\glassfish4\docs\firstcup\example\ dukes- Age,選擇檔案 pom.xml 並點擊「確定」: 將開啟具有以下結構的應用程式: 讓我們看一下類別程式碼DukesAgeResource
:
package firstcup.dukesage.resource;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
/**
* REST Web Service
*
*/
@Path("dukesAge")
public class DukesAgeResource {
/** Creates a new instance of DukesAgeResource */
public DukesAgeResource() {
}
/**
* Retrieves representation of an instance of DukesAgeResource
* @return an instance of java.lang.String
*/
@GET
@Produces("text/plain")
public String getText() {
// Create a new Calendar for Duke's birthday
Calendar dukesBirthday = new GregorianCalendar(1995, Calendar.MAY, 23);
// Create a new Calendar for today
Calendar now = GregorianCalendar.getInstance();
// Subtract today's year from Duke's birth year, 1995
int dukesAge = now.get(Calendar.YEAR) - dukesBirthday.get(Calendar.YEAR);
dukesBirthday.add(Calendar.YEAR, dukesAge);
// If today's date is before May 23, subtract a year from Duke's age
if (now.before(dukesBirthday)) {
dukesAge--;
}
// Return a String representation of Duke's age
return "" + dukesAge;
}
}
這是一個 JAX-RS RESTful Web 服務,有一個方法 - getText()
。如果您檢查此方法的代碼,您會發現該方法傳回自 Duke 出生以來已經過去的年數。也就是說,該方法會傳回 Duke 的年齡。類別是 REST 上下文中的資源。
- 類別上方的註解
@Path("dukesAge")
定義了此類將處理的呼叫的 URI 路徑。 - 該方法上方的註釋
@GET
告訴我們該方法處理 GET 請求。 - 此註釋
@Produces("text/plain")
指定對請求的回應的媒體類型。不難猜測該方法getText()
將產生媒體類型為text/plain 的回應。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
</web-app>
在此文件中,在 tag 內部,定義了具有值的servlet-mapping
標記。這裡定義了某個根點,服務將進一步處理對該根點的呼叫。如果結合註解來看,原來要取得Duke的年齡訊息,需要聯絡地址/webapi/dukesAge。 url-pattern
/webapi/*
@Path("dukesAge")
設定 IntelliJ IDEA 以在 GlassFish 伺服器上執行 Java EE 應用程式
現在我們對 dukes-age 應用程式有了一個非常總體的了解(在Oracle 網站上了解更多相關資訊),讓我們配置 IntelliJ IDEA,以便可以從我們的 IDE 運行該應用程式。設定 IntelliJ IDEA- 為此,請轉到選單“運行”->“編輯配置”。
- 運行/調試配置面板將開啟:
- 我們需要新增一個新的配置。為此,請按一下加號,或使用 Alt+Insert 熱鍵。在開啟的清單中,選擇 GlassFish Server -> Local:
- 在打開的視窗中,讓我們開始設定配置:
- 下一步是指示需要部署到伺服器的工件。這可以透過「部署」標籤完成,方法是點擊加號 -> Artifact...
- 選擇 dukes-age:war 並按一下「確定」:
- 接下來,按一下“應用”,然後按一下“確定”以儲存我們的配置。
啟動應用程式
現在讓我們嘗試運行該應用程式。-
為此,您可以使用熱鍵 Alt+Shift+F10,或透過選單“運行”->“運行...”
並選擇我們創建的 dukes-age 配置:
-
之後我們在「服務」面板中看到啟動日誌:
-
然後,如果一切都按照說明完成,瀏覽器將打開,並且很明顯沒有任何效果:
-
為此,我們返回 IntelliJ IDEA,然後轉到選單:Run -> Edit Configurations...
-
我們選擇之前儲存的配置並按照下面的截圖更新URL:
-
讓我們儲存配置並使用 Ctrl+Shift+F10 熱鍵或使用「服務」面板上的特殊按鈕重新啟動應用程式:
-
重啟後,如果一切正確,我們將看到 Duke 的年齡:
結論
在本文中,我們以 GlassFish 4.0 伺服器、IntelliJ IDEA 2019.3.1(旗艦版)開發環境和 Java EE SDK 版本 7 為例,了解如何配置本地環境以使用 Java EE 應用程式。您可以如何:- 下載並安裝 Java EE SDK 以及 GlassFish 伺服器;
- 透過 PowerShell 停止和啟動 GlassFish 伺服器;
- 配置 IntelliJ IDEA,以便您可以將 Java EE 應用程式從 IDE 部署到 GlassFish 伺服器並立即啟動它們。
獎勵任務
- 自己重複所有描述的步驟。
- 參加Oracle 為 Java EE 初學者開發人員提供的 Java EE 入門課程。
- 有星號的項目。嘗試自行部署第二個first-cup 演示應用程式。該應用程式的互動性更強,並且還可以與 dukes-age 應用程式進行互動。要完成此步驟,您需要獨立理解以下問題:
- 如何啟用 glassFish 伺服器內的資料庫;
- 如何將兩個應用程式相互整合(first-cup 內部指示我們在本文中討論的 dukes-age 端點的路徑);
- 如何在 Intellij IDEA 中建立新配置以進行首次杯部署(類似於本文中所示的內容);
- 可能還有很多其他問題)
GO TO FULL VERSION