理解本文所需的知識水平:您已經或多或少地了解了 Java Core,並且想了解 JavaEE 技術和 Web 程式設計。如果您目前正在研究 Java Collections 任務,那麼它是最有意義的,它涵蓋了與本文接近的主題。
我目前使用的是 IntelliJ IDEA 企業版(這是 IDE 的付費高級版本,通常用於專業開發 -
編者註)。與免費的社群版相比,處理 Web 專案要容易得多。因此,在企業版中,只需單擊滑鼠,即可組裝項目,將其倒入 servlet 容器中,啟動伺服器,甚至在瀏覽器中開啟包含正在運行的項目的頁面。在這個想法的免費版本中,大部分工作都必須獨立完成,可以說是「手工」。我使用 Apache Maven 來建立專案並管理其生命週期。在此,我僅使用了其功能的一小部分(套件/依賴項管理)。我選擇 Apache Tomcat 版本 9.0.0.M4 作為 servlet 容器/應用程式伺服器。我知道已經有更新的版本,但這是我安裝的版本。
讓我們開始吧
首先,讓我們打開 IntelliJ IDEA 並建立一個空的 Maven 專案。
在左側我們選擇 Maven,檢查專案的 JDK 是否顯示在頂部。如果不存在,請從清單中選擇您需要的,或按一下「新建...」並直接從您的電腦中選擇。在視窗中間,我有一個載入原型清單的動畫。我們不需要它們,因此無需等待下載,即可點擊視窗底部的「下一步」。
在此視窗中,您需要指定
GroupId 和 ArtifactId。GroupId是指製作該專案的公司的唯一識別碼。通常的做法是使用公司的域名,但順序相反。不是鏡像意義上的,但例如,如果一家公司的網域
是 maven.apache.org,那麼它的 GroupId 將是
org.apache.maven。也就是首先我們寫一級域名,用點分隔,再寫二級域名的名稱,以此類推。這是普遍接受的方法。如果您自己「削減」一個項目,而不是作為公司的一部分,請在此處寫下您的個人網域(也以相反的順序!)。如果你有的話,當然可以:)。如果沒有,請不要沮喪。事實上,你可以在這裡寫
任何東西。
對於網域為 vasya.pupkin.org 的公司,GroupId 將為 org.pupkin.vasya。為了區分具有相同名稱但由不同公司發布的項目,需要這種名稱方法。 |
在此範例中,我將使用虛構的網域名稱
fatfaggy.info.javarush.ru。因此,我在
GroupId欄位中輸入
ru.javarush.info.fatfaggy。
ArtefactId只是我們專案的名稱。您可以使用字母和一些符號(例如連字符)來分隔單字。我們的“工件”的名稱將與我們在這裡所寫的完全一樣。在此範例中,我編寫了
my-super-project。我們暫時不觸及版本字段,保持原樣。
嗯,創建新專案時的標準IDEA視窗。按照傳統,我們將其稱為
“我的超級項目”。
專案已建立!
pom.xml 檔案立即在我們面前開啟。這是一個包含 Maven 設定的檔案。如果我們想「告訴」Maven 做什麼、如何做或從哪裡獲取某些東西,我們就在這個 pom.xml 檔案中描述所有這些。它位於專案的根目錄。 |
我們看到它現在包含了我們在創建 Maven 專案時輸入的資料:
groupId、
artifactId和
version(我們沒有觸及後者)。
我們的專案結構
這個Maven專案有一定的結構。
正如我們所看到的,其根源在於:
- .idea目錄,包含目前項目的 idea 設定;
- 我們在其中建立原始碼的src目錄;
- my-super-project.iml文件,IDEA 建立的專案文件;
- pom.xml文件,與我上面談到的相同 Maven 專案文件,我們現在已經開啟了。如果我在某處提到 pom.xml 或“pom”,我指的是這個特定的檔案。
src資料夾又包含兩個子資料夾:
- main - 我們的程式碼;
- test - 用來測試我們的程式碼。
main和
test都有一個
java資料夾。假設它們是同一個資料夾,只有
main中的一個用於原始程式碼,
test中的一個用於測試程式碼。我們暫時不需要
資源資料夾,我們不會使用它。但還是讓他躺著吧。
變成一個web項目
現在是我們將 Maven 專案轉換為 Web 專案的時候了。為此,請右鍵單擊此樹中的項目名稱,然後選擇
新增框架支援...
將打開一個窗口,我們可以在其中為項目的各種不同框架添加支援。但我們只需要一個:
Web 應用程式。我們選擇他。
我們檢查Web Application 旁邊是否有一個複選標記,並且在視窗的主要部分中註意到我們希望立即為我們建立一個
web.xml檔案(如果不存在,我建議選取該方塊)。之後,我們將看到我們的專案結構已補充了
web資料夾。
這是我們網路專案的根目錄
/。也就是說,如果我們在瀏覽器中輸入 localhost 位址(當然,當我們啟動它時),那麼它將準確地在這裡存取到 Web 專案的根目錄。如果我們輸入
localhost/addUser ,那麼web資料夾將會尋找名為
addUser的資源。
主要是要明白,當我們上傳到Tomcat時,web資料夾是我們專案的根目錄。現在我們有了一定的資料夾結構,但是在我們將上傳的完成的專案中,它會略有不同,web資料夾將是根目錄。 |
在
web中,有一個名為
WEB-INF的必需資料夾,其中包含我們在上一個步驟中要求建立的
web.xml檔案。讓我們打開它。
正如你所看到的,它還沒有什麼有趣的東西,只有「帽子」。順便說一句,如果我們沒有要求創建它,我們可能不得不手動創建它,即手動輸入整個“標題”,或者在極端情況下,在互聯網上尋找現成的版本。
web.xml是做什麼用的?用於測繪。這裡我們將告訴 Tomcat 哪個 URL 請求要傳送到哪個 servlet。但這都是以後的事了,現在我們將其留空。
web資料夾中還有一個名為
index.jsp的檔案。讓我們打開它。
可以說,這是預設將執行的檔案。也就是說,當我們啟動該專案時,這正是我們將看到的。本質上,
jsp是一個普通的html文件,不同之處在於你可以在其中執行java程式碼。
關於靜態和動態內容的一些知識
靜態內容是不隨時間變化的內容。我們在 html 檔案中編寫的所有內容都將原樣顯示。如果我們寫的是hello world,那麼我們一開啟頁面就會顯示這個銘文,5分鐘後、明天、一週後、一年後都會顯示這個銘文。她不會改變。但是如果我們想在頁面上顯示當前日期怎麼辦?如果我們簡單地寫“2017 年 10 月 27 日”,那麼明天、一周後和一年後我們都會看到相同的日期。但我希望這個日期仍然具有相關性。這就是直接在頁面內執行某些程式碼的能力對我們有幫助的地方。我們可以取得一個日期對象,將其轉換為我們需要的形式並顯示在頁面上。然後每天,每當我們打開頁面時,日期總是相關的。如果我們只需要靜態內容,那麼常規的 Web 伺服器和 html 檔案就足夠了。我們不需要任何 Java、Maven 或 Tomcat。但如果我們想使用動態內容,這一切就會派上用場。但現在讓我們回到我們的
index.jsp。讓我們指示一些我們自己的內容而不是標準標頭,例如“我的超級網路應用程式!”,並在正文中編寫,例如“我還活著!” 我們幾乎準備好啟動我們的專案了!但不幸的是,啟動該程式的通常綠色三角形並未啟動。
讓我們單擊左側的按鈕(在螢幕上用紅色箭頭指示)並選擇
編輯配置... 將打開一個窗口,要求我們單擊綠色加號以添加某種配置。單擊它,它位於視窗的左上角。
選擇
Tomcat Server項和
Local 子項。 將打開一個包含許多不同參數的窗口,但我們對幾乎所有參數和預設參數都感到滿意。
我們可以以某種方式很好地命名我們的配置,而不是標準的
未命名(在最頂部)。
還需要檢查idea是否在我們的系統中成功找到了Tomcat(您之前已經下載並安裝了它,對吧?)。如果您找不到它(這不太可能),請點擊向下箭頭並選擇我們安裝它的位置,或者如果您有多個版本,請選擇其他版本。我有一個並且已經安裝了,所以一切都如螢幕截圖所示。在視窗的最底部,我們看到有一個警告,表示沒有任何工件要部署到伺服器。在這個銘文的右側有一個按鈕可以糾正這個缺陷。我們點擊它,看到這個想法本身找到了一切,自己創造了一切,它缺少什麼,並自行進行了所有設定。
我們看到我們從
Server選項卡轉移到了
Deployment選項卡,在
Deploy at the serverstarting部分中我們已經有了需要部署的工件,並且下面表明該工件將在部署之前建置。
申請一下,好的。 我們首先看到,在視窗底部出現了一個部分,其中包含我們的本地 Tomcat 伺服器,我們的工件將放置在其中。您可以透過點擊視窗右側的相應按鈕來折疊此部分。
我們也看到用於啟動的綠色三角形已經處於活動狀態。對於想要檢查所有內容的人,您可以單擊帶有項目設定的按鈕(在啟動按鈕的右側,標有紅色箭頭),轉到工件部分
並確保工件確實已建立。
直到我們按下“修復”按鈕之前它才出現,但現在一切正常。而且這個配置非常適合我們。簡而言之,
my-super-project:war和
my-super-project:warexploded之間的差異在於
my-super-project:war只會建立一個war檔(這只是一個檔案),而選項
爆炸根本就是
一場「拆包」戰爭。這個選項對我個人來說更方便,因為它允許我快速將小的更改部署到伺服器。事實上,該工件就是我們的項目,只是已經編譯好了,並且其中的資料夾結構已更改,以便可以直接上傳到 Tomcat。它看起來像這樣:
好了,現在一切準備就緒,可以啟動我們的專案了。
我們按下令人垂涎的綠色啟動按鈕並享受結果!:)
GO TO FULL VERSION