使用IDEA建立servlet JavaWeb 應用及使用Tomcat本地部署的實現
目錄
- 需要安裝好的軟體
- 背景知識-Servlet是什麼?
- Servlet 是一種規範
- Servlet 介面
- P
- Web 容器
- 背景知識-Web應用的目錄結構
- 1.新建一個java專案
- 2.將普通java專案轉換成JavaWeb專案
- 3.進行專案目錄結構的設定
- 4.引入Tomcat的jar包
- 5.簡單寫一些程式碼用來測試www.cppcns.com
- 6.設定Tomcat
- 7.開啟Tomcat
- 總結
記錄一下使用IDEA建立servlet並使用Tomcat本地部署的過程。
需要安裝好的軟體
首先IDEA社群版不支援Java EE,因此要使用Ultimate版本。
Tomcat版本是Tomcat9。Tomcat教程地址:Tomcat下載和安裝(圖解)
在安裝好IDEA Ultimate版本和Tomcat9之後,我們還需要了解一些背景知識,以便我們更好的進行這個過程。
背景知識-Servlet是什www.cppcns.com麼?
Servlet 是 Server Applet 的縮寫,譯為“伺服器端小程式”,是一種使用 Java 語言來開發動態的技術。
Servlet 雖然被稱作“小程式”,但是它的功能卻異常強大,因為它是基於 Java 的,幾乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。
Java 是一種功能強大的通用型語言,可以處理 HTTP 請求,可以訪問,可以生成 HTML 程式碼,您完全可以使用原生 Java 來開發動態網站。但是,使用原生 Java 開發動態網站非常麻煩,需要自己解析 HTTP 請求的報頭,需要自己分析使用者的請求引數,需要自己載入資料庫元件……種種原因導致使用原生 Java 開發動態網站幾乎是一件不能被接受的事情。正是基於這種原因,Java 官方後來推出了 Servlet 技術,它對開發動態網站需要使用的原生 Java API 進行了封裝,形成了一套新的 API,稱為 Servlet API。
使用 Servlet 開發動態網站非常方便,程式設計師只需要集中精力處理業務邏輯,不需要再為那些基礎性的、通用性的功能編寫程式碼,這使得 Servlet 在動態網站開發領域具備了很高的實用性。
Servlet 基於 Java,可以使用幾乎全部的 Java API,所以它的功能異常強大,完全可以勝任企業級開發,能夠處理那些高併發、大吞吐量、業務邏輯複雜的應用場景。
您可以這樣理解,Servlet 是 Sun 公司推出的一種基於 Java 的動態網站開發技術。編寫 Servlet 程式碼需要遵循 Java 語法,一個 Servlet 程式其實就是一個按照 Servlet 規範編寫的 Java 類。Servlet 程式需要先編譯成位元組碼檔案(.class
Servlet 是一種規範
嚴格來說,Servlet 只是一套 Java Web 開發的規範,或者說是一套 Java Web 開發的技術標準。只有規範並不能做任何事情,必須要有人去實現它。所謂實現 Servlet 規範,就是真正編寫程式碼去實現 Servlet 規範提到的各種功能,包括類、方法、屬性等。
Servlet 規範是開放的,除了 Sun 公司,其它公司也可以實現 Servlet 規範,目前常見的實現了 Servlet 規範的產品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它們都被稱為“Servlet 容器”。Servlet 容器用來管理程式設計師編寫的 Servlet 類。
Servlet 介面
所有的 Servlet 功能都是通過一個名為Servlet
的介面(Interface)向外暴露的,編寫 Servlet 程式碼,可以從實現 Servlet 介面開始,就像下面這樣:
public class ServletDemo implements Servlet { //TODO:}
直接實現 Servlet 介面比較麻煩,需要實現很多方法,所以 Servlet 規範又提供了兩個抽象類,分別是 GenericServlet 類和 HttpServlet 類,它們都實現了 Servlet 介面的很多常用功能。和 GenericServlet 類相比,HttpServlet 類更加方便,所以實際開發中一般都繼承自 HttpServlet 類。
JSP
Servlet 是第一代 Java Web 開發技術,它將 HTML 程式碼以字串的形式向外輸出,編寫 HTML 文件就是在拼接字串,非常麻煩,所以 Java 官方又推出了第二代 Web 開發技術——JSP。
JSP 才是現代化的 Web 開發技術,它允許 HTML 程式碼和 JSP 程式碼分離,讓程式設計師能夠在 HTML 文件中直接嵌入 JSP 程式碼。
現在沒有人直接使用 Servlet 開發動態網站,大家都轉向了 JSP 陣營。但是 JSP 依賴於 Servlet,使用者訪問 JSP 頁面時,JSP 程式碼會被翻譯成 Servlet 程式碼,最終,HTML 程式碼還是以字串的形式向外輸出的。您看,JSP 只是在 Servlet 的基礎上做了進一步封裝。
JSP 程式碼可以呼叫 Servlet 類,程式設計師可以將部分功能在 Servlet 中實現,然後在 JSP 中呼叫即可。
總之,Servlet 是 JSP 的基礎,Servlet 雖然不直接面向用戶,但是它依然是 JSP 的後臺支撐,想玩轉 JSP,必須先玩轉 Servlet。
學習順序:
- 學習 Servlet 的正確順序是:Java --> Servlet。
- 學習 JSP 的正確順序是:Java --> Servlet --> JSP。
Web 容器
我們知道,Servlet 是基於 Java 語言的,執行 Servlet 必然少不了 JRE 的支援,它負責解析和執行位元組碼檔案(.class
檔案)。然而 JRE 只包含了 Java 虛擬機器(JVM)、Java 核心類庫和一些輔助性性檔案,它並不支援 Servlet 規範。要想執行 Servlet 程式碼,還需要一種額外的部件,該部件必須支援 Servlet 規範,實現了 Servlet 介面和一些基礎類,這種部件就是 Servlet 容器。
Servlet 容器就是 Servlet 程式碼的執行環境(執行時),它除了實現 Servlet 規範定義的各種介面和類,為 Servlet 的執行提供底層支援,還需要管理由使用者編寫的 Servlet 類,比如例項化類(建立物件)、呼叫方法、銷燬類等。
Servlet 中的容器和生活中的容器是類似的概念:生活中容器用來裝水、裝糧食,Servlet 中的容器用來裝類,裝物件。
讀者可能會提出疑問,我們自己編寫的 Servlet 類為什麼需要 Servlet 容器來管理呢?這是因為我們編寫的 Servlet 類沒有 main() 函式,不能獨立執行,只能作為一個模組被載入到 Servlet 容器,然後由 Servlet 容器來例項化,並呼叫其中的方法。
一個動態頁面對應一個 Servlet 類,開發一個動態頁面就是編寫一個 Servlet 類,當用戶請求到達時,Servlet 容器會根據配置檔案(web.xml)來決定呼叫哪個類。
下圖演示了 Servlet 容器在整個 HTTP 請求流程中的位置:
您看,Web 伺服器是整個動態網站的“大門”,使用者的 HTTP 請求首先到達 Web 伺服器,Web 伺服器判斷該請求是靜態資源還是動態資源:如果是靜態資源就直接返回,此時相當於使用者下載了一個伺服器上的檔案;如果是動態資源將無法處理,必須將該請求轉發給 Servlet 容器。
Servlet 容器接收到請求以後,會根據配置檔案(web.xml)找到對應的 Servlet 類,將它載入並例項化,然後呼叫其中的方法來處理使用者請求;處理結束後,Servlet 容器將處理結果再轉交給 Web 伺服器,由 Web 伺服器將處理結果進行封裝,以 HTTP 響應的形式傳送給最終的使用者。
常用的 Web 容器有 Tomcat、Jboss、Jetty、WebLogic 等,其中 Tomcat 由 Java 官方提供,是初學者最常使用的。
為了簡化部署流程,Web 容器往往也會自帶 Web 伺服器模組,提供基本的 HTTP 服務,所以您可以不用再安裝 Apache、IIS、Nginx 等傳統意義上的伺服器,只需要安裝一款 Web 容器,就能部署 Servlet 網站了。正是由於這個原因,有的教材將 Tomcat 稱為 Web 容器,有的教材又將 Tomcat 稱為 Web 伺服器,兩者的概念已經非常模糊了。
將 Web 容器當做伺服器使用後,上面的流程圖就變成了下面的樣子:
注意,Servlet 容器自帶的 Web 伺服器模組雖然沒有傳統的 Web 伺服器強大,但是也足以應付大部分開發場景,對初學者來說是足夠的。當然,您也可以將傳統的 Web 伺服器和 Servlet 容器組合起來,兩者分工協作,各司其職,共同完成 HTTP 請求。
總結
Servlet 容器就是 Servlet 程式的執行環境,它主要包含以下幾個功能:
- 實現 Servlet 規範定義的各種介面和類,為 Servlet 的執行提供底層支援;
- 管理使用者編寫的 Servlet 類,以及例項化以後的物件;
- 提供 HTTP 服務,相當於一個簡化的伺服器。
背景知識-JavaWeb應用的目錄結構
JavaWeb 應用由一組 Servlet/JSP、HTML 檔案、相關 Java 類、以及其他的資源組成,它可以在由各種供應商提供的 Servlet 容器中執行。由 JavaWeb 應用的定義可知, Servlet 是 JavaWeb 應用的一個元件。
為了讓 Servlet 容器順利地找到 JavaWeb 應用的各個元件,Servlet 規範規定,JavaWeb 應用必須採用固定的目錄結構,即每種元件在 JavaWeb 應用中都有固定的存放目錄。
以 Tomcat 為例,通常將 JavaWeb 應用存放到 Tomcat 的 webapps 目錄下。在 webapps 下,每一個子目錄都是一個獨立的 Web 應用,子目錄的名字就是 Web 應用的名字,也被稱為 Web 應用的上下文根。使用者可以通過這個上下文根來訪問 JavaWeb 應用中的資源。
webapps 的目錄結構如下圖。
下表中對 webapps 下各個目錄進行了介紹。
目錄 | 描述 | 是否必需 |
---|---|---|
\servletDemo | Web 應用的根目錄,屬於該 Web 應用的所有資源都存放在這個目錄下。 | 是 |
\servletDemo\WEB-INF | 存放 web.xml、lib 目錄以及 classes 目錄等。 | 是 |
\servletDemo\WEB-INF\classes | 存放各種 .class 檔案或者包含 .class 檔案的目錄,Servlet 類的 .class 檔案也存放在此。 | 否 |
\servletDemo\WEB-INF\lib | 存放應用所需的各種 jar 包,例如 JDBC 驅動程式的 jar 包。 | 否 |
\servletDemo\WEB-INF\web.xml | web.xml 中包含應用程式的配置和部署資訊。 | 是 |
下面我們一步一步開始這個過程:
1.新建一個java專案
先看一下預設建好的java專案的目錄結構:
2.將普通java專案轉換成JavaWeb專案
通過背景知識JavaWeb應用的目錄結構,我們可以知道普通Java專案的目錄結構和JavaWeb專案的目錄結構差別是很大的,因此我們需要將普通專案轉成JavaWeb專案。
在專案名上右鍵,選擇 Add Framework Support
勾選Web Application
此時,我們可以看到專案的目錄結構變成了如下所示情況
可以看到,和之前JavaWeb應用的目錄結構已經差不多了,但是在目錄WEB-INF下,還缺少兩個目錄classes和lib,我們自己新建一下這兩個目錄即可。
新建好之後,專案目錄結構如下圖所示:
3.進行專案目錄結構的設定
我們知道JavaWeb應用的目錄結構中:
\servletDemo\WEB-INF\classes目錄存放各種 .class 檔案或者包含 .class 檔案的目錄,Servlet 類的 .class 檔案也存放在此。
\servletDemo\WEB-INF\lib目錄存放應用所需的各種 jar 包,例如 JDBC 驅動程式的 jar 包。
因此我們要對編譯生成的位元組碼檔案的路徑進行一下更改。
點選File-Project Structure
將Modules中的Paths改成你專案中的classes目錄
繼續,在Libraries中新增lib目錄
選擇 Jar Directory
4.引入Tomcat的jar包
此時我們想要新建一個servlet是新建不了的,因為JRE並沒有包含這個包,這個包在Tomcat中存在,因此我們需要將這個包新增進來。
右鍵專案名,選擇Open Module Settings
新增Tomcat安裝目錄下的servlet-api.jar包。
此時,我們新建檔案即可發現servlet選項了!
設定類名和包名
5.簡單寫一些程式碼用來測試
此時我的Servlet.java檔案內容如下:
import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = "Servlet",value = "/Servlet") public class Servlet extends HttpServlet { @Override public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException { //使用PrintWriter.write()方法向前臺頁面輸出內容 resp.setContentType("text/html;charset=UTF-8"); PrintWriter writer = resp.getWriter(); writer.write("good good study,learn to change"); writer.close(); } @Override public void doPost(HttpServletRequest req,IOException { //使用PrintWriter.write()方法gaifang向前臺頁面輸出內容 PrintWriter writer = resp.getWriter(); writer.write("good good study,learn to change"); writer.close(); doGet(req,resp); } }
6.設定Tomcat
因為我們是需要在IDEA中啟動Tomcat,並把我們的專案部署上去。因此我們需要對Tomcat進行設定。
點選選單欄上的Run-Edit Configuration
點選加號
選擇Tomcat server中的Local
配置一下Tomcat安裝目錄,然後系統會自動識別出Tomcat的版本。
點選切換到Deployment下,點選下面的加號,選擇Artifact。
7.開啟Tomcat
設定好Tomcat資訊之後,選單欄右上側會出現如下按鈕。
點選綠色小三角,執行Tomcat。
在瀏覽器中輸入下面網址:http://localhost:8080/blog_war_exploded/Servlet
為什麼是這個地址呢?
前面Towww.cppcns.commcat設定時,我們設定了一個路徑/blog_war_exploded。Servlet是我們建立的類,因此通過這個地址就可以訪問到我們的。
一切正常的話,我們可以看到如下畫面
說明我們的servlet專案已經成功部署在本地執行的Tomcat上。
總結
其實上面的一個過程,是我們將一個非常簡單的Servlet專案部署到Tomcat上,只是為了讓大家瞭解這樣一個過程,這樣後面只需要專注於專案的開發。
到此這篇關於使用IDEA建立servlet JavaWeb 應用及使用Tomcat本地部署的實現的文章就介紹到這了,更多相關IDEA建立servlet JavaWeb 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!