JavaRush /Java Blog /Random-TW /Java 中的 Tomcat

Java 中的 Tomcat

在 Random-TW 群組發布
在某種程度上,每個開發人員都獲得了足夠的技能,他會考慮創建自己的項目,將自己的知識付諸實踐。進行 Web 專案是最容易的,因為 Web 應用程式的實作不受任何限制,例如桌面應用程式。客戶端只需要一個瀏覽器,無需下載任何發行版即可與應用程式互動。正如他們所說,無需註冊和短信(儘管這取決於應用程式本身)。 Java 中的 Tomcat - 1所以,為了用Java實現一個好的Web應用程序,你離不開一個叫做Tomcat的工具。 內容:

Tomcat 知道 Javarush

Tomcat 在 JavaRush 課程中 Java Collections 任務的第 9 級學習。在 2 個講座中,Bilaabo 將告訴您如何下載和設定 Tomcat,以及建立您的第一個 Web 應用程式

雄貓 - 它是什麼?

Tomcat 是一個開源 servlet 容器,也充當 Web 伺服器。乍一看,Tomcat似乎是一個相當沉重的話題,但事實並非如此。大多數 Java 應用程式都是使用命令列啟動並執行一些操作。此類應用程式實作一個預先定義的功能,之後就不再執行。此類程序通常有一種main可以啟動它們的方法。Web 應用程式旨在與用戶端互動。如果有來自客戶端的請求,則會對其進行處理並將回應傳送給使用者。如果不是,則應用程式處於空閒狀態。考慮到您需要支援會話、接受 HTTP 請求等,如何在標準應用程式中實現這樣的邏輯?循環while-true?不,我們需要一個可靠的解決方案。這就是 Tomcat 的用途。事實上,它是一個 Java 應用程序,負責打開客戶端互動的連接埠、設定會話、請求數量、標頭長度以及更多操作。

Tomcat元件

Tomcat 具有執行特定功能的元件,值得了解。讓我們仔細看看。

卡塔莉娜

由於這個元件,開發人員有機會在容器中部署他們的程式。Catalina 實作了 Servlet API 規範,這是 Java Web 程式設計中的核心 Web 技術。事實上,Catalina 是Tomcat 內部的 servlet 容器(我們將在下面更詳細地了解這個概念)。

碧玉

由於這個元件,程式設計師可以使用JSP技術。它們就像 HTML 文件,只是它們嵌入了 Java 程式碼,可以在頁面傳送給使用者時執行。這允許您動態地將任何資料嵌入到頁面中。Jasper 將 Java 程式碼轉換為 HTML,並且還追蹤變更並自動更新它們。

土狼

這是一個重要的元件,它在特定連接埠上偵聽來自客戶端的 HTTP 請求,提供該資料以在應用程式中進行處理,並向使用者傳回回應。也就是說,Coyote 實作了 HTTP 伺服器的功能。這些組件可以透過下圖在結構上進行描述: Java 中的 Tomcat - 2這裡「在手指上」顯示了組件互動的近似圖。事實上,Tomcat 的工作方式要複雜得多,但這足以進行基本的了解。

安裝Tomcat

要在Java中使用Tomcat,需要在系統上安裝它。您可以在本文中閱讀如何安裝 Tomcat,其中還涵蓋了其他應用程式伺服器。因此,在 IDEA 中內建了一個可以工作的 Tomcat 後,您可以嘗試準備您的第一個 servlet。

如何創建網頁應用程式

要建立 Web 應用程序,您必須遵守特定的資料夾結構。IntelliJ IDEA在專案建立選單中有Web應用程式產生功能。以這種方式建立專案後,您可以看到一個簡單的結構: Java 中的 Tomcat - 3在src中,一如既往,有原始程式碼,並且在web資料夾中產生了web.xml和index.jsp。web.xml 是 Tomcat 尋找請求處理程序和其他資訊的指令。index.jsp 是 Web 應用程式的主頁,使用者應該先訪問該頁面(這是預設配置)。第一次運行時,您可以簡單地編輯 index.jsp 檔案:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
   <h1>Hello world!</h1>
 </body>
</html>
如果Tomcat直接安裝在IDEA中,則可以啟動應用程式伺服器: Java 中的 Tomcat - 4用戶端導覽至「/」即主頁面時,接收到瀏覽器中index.jsp檔案的內容。現在讓我們新增一個指向目前伺服器時間所在頁面的連結。要建立您的第一個 servlet,您需要使用 Tomcat 附帶的 servlet-api.jar 庫(可以在 lib 資料夾中找到)。讓我們建立一個 servlet,它將在頁面上顯示目前伺服器時間。為此,您需要建立一個類別TimeWorker。讓我們將其放在 src/ru/javarush/tomcat 資料夾中:
package ru.javarush.tomcat;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class TimeWorker extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     Date date = new Date();
     req.setAttribute("date", date.toString());
     req.getRequestDispatcher("time.jsp").forward(req, resp);
  }
}
TimeWorker從類別繼承HttpServlet並覆蓋doGet. 在此方法中,我們接收兩個參數 -requestresponse。例如,儲存request具有名稱data並包含目前日期的字串表示形式的屬性。然後它被調用,參數和requestDispatcher被傳遞給它。處理程序已建立。現在你需要專門向他發送請求。讓任何轉換都引導至 time.jsp 頁面。開啟web.xml,在標籤之間插入以下配置: requestresponse/time<web-app>
<servlet>
   <servlet-name>timeWorker</servlet-name>
   <servlet-class>ru.javarush.tomcat.TimeWorker</servlet-class>
   </servlet>

<servlet-mapping>
   <servlet-name>timeWorker</servlet-name>
   <url-pattern>/time</url-pattern>
</servlet-mapping>

<welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
第一個標記 - servlet- 定義 servlet 的名稱並指定將處理請求的 servlet 類別的路徑。第二個標籤--表示當請求時將呼叫servlet-mapping該名稱的servlettimeWorker 網址/時間。第三個標籤 welcome-file-list--表示切換到 時將要呼叫的檔案 url /。如果需要更改預設文件,則必須進行配置。此處包含作為範例。現在,當您轉到時, /time將呼叫 doGet類別中的方法 TimeWorker並返回不存在的頁面 time.jsp...。讓我們在index.jsp 旁邊創建它:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
   <title>Hello</title>
</head>
<body>
   <h1>Current server time: <%=request.getAttribute("date")%></h1>
</body>
</html>
開頭很經典,但標籤 h1包含對物件的訴求 request,該物件由 <%=和構成 %>。這些是模板標籤。這些標記中包含的程式碼在傳送到客戶端之前會被呼叫。好吧,任何 JSP 檔案中的此類標記中都可以使用 request物件。 response在此範例中,將取代由 servlet 傳輸的目前伺服器時間 TimeWorker。為了方便起見,我們建立一個指向 index.jsp 檔案的連結 /time
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
   <h1>Hello world!</h1>
   <a href="/time">Узнать текущее время serverа</a>
 </body>
</html>
讓我們運行這個例子: Java 中的 Tomcat - 5點擊連結: Java 中的 Tomcat - 6太好了,一切正常。在範例中,我們實作了從主頁面到輔助頁面的轉換,向輔助頁面傳遞參數並顯示給使用者。如果您在執行 servlet 時遇到問題,我建議您閱讀 這篇文章,其中提供了解決此問題的提示。要更完整地介紹 servlet,我們建議閱讀文章( 第 1 部分第 2 部分),其中作者詳細描述了使用 servlet 和 jsp 創建簡單應用程式的過程。

如何將應用程式嵌入到正在運行的伺服器中

雖然IDEA內建的Tomcat是一個方便的功能,但Web應用程式可以移動到另一台伺服器和另一個容器。當您需要將應用程式嵌入到已經運行的伺服器中時,讓我們考慮一下該選項。首先,有必要進一步了解 servlet容器的用途和功能。上例中顯示的程式是一個 Web 應用程式。這個類別 TimeWorker是一個servlet。組件專門執行請求處理。這些元件必須建置到特殊的 servlet 容器中。 servlet 容器的目的是支援 servlet 並確保其生命週期。Tomcat 運作方式最簡單的範例是掃描特定資料夾以確定其中是否出現新的 servlet。如果是,則對其進行初始化並準備好接收來自客戶端的請求。如果servlet已更新,請重新初始化以更新元件。刪除 servlet 時,停止處理請求並從 Tomcat 中刪除該 servlet。

Servlet 容器函數

  1. servlet 和客戶端之間的資料交換;
  2. 組織客戶會議;
  3. 創建用於 servlet 運行的軟體環境;
  4. Идентификация и авторизация клиентов;
  5. В большинстве случаев — управление метаданными (заголовки, методы и прочее).
Во-вторых, необходимо разобраться, How установить свой сервлет.

Установка сервлета

Tomcat принимает для обработки веб-applications на Java, которые имеют расширение .war. Это How jar, только web. Файлы такого типа объединяют в себе JSP-файлы, сервлеты, class-файлы, статические ресурсы и прочее. При установке такого file в Tomcat происходит его распаковка, а затем запуск, поэтому существует строгое требование к структуре файлов в проекте. Если проект был создан в IDEA, вся структура создана автоматически. Файл war можно создать стандартными средствами IDEA. Для этого необходимо зайти в ProjectStructure -> Artifacts -> Нажать “ +” -> WebApplication: Archive. В открывшемся поле задать Name для итогового war-file, например deployed_war. Ниже необходимо нажать на кнопку Create Manifest… Далее необходимо указать way to папке web проекта. В ней будет создана папка META-INF, в которую будет помещен файл MANIFEST.MF. Далее следует нажать Apply и Ok. Whatбы собрать проект в war-файл, следует во вкладке Build выбрать опцию Build Artifact: Java 中的 Tomcat - 7В появившемся поле нужно нажать на deployed_war. Затем начнется сборка проекта и Intellij IDEA создаст папку out, в которой появится папка artifacts с именем нашего артефакта. В этой папке будет лежать файл deployed_war.war: Java 中的 Tomcat - 8Теперь можно деплоить этот файл в Tomcat. Деплой applications проще всего выполнить из веб-интерфейса Tomcat. Просто нажмите кнопку выбора file на вкладке Deploy, перейдите к местоположению file WAR и выберите его, затем нажмите кнопку развертывания. В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам, что развертывание прошло успешно примерно таким выводом в консоль: INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

Польза Tomcat для разработки

Для разработчиков контейнеры сервлетов имеют огромную роль, так How решают целый спектр проблем. Для программирования на Java Tomcat обеспечивает несколько серьезных преимуществ:
  1. Самое главное, Tomcat может выполнять роль полноценного web-serverа. Благодаря этому развертывание приложений происходит гораздо быстрее, чем было раньше.Также Tomcat может выступать в роли классического контейнера сервлетов, который можно встроить в более крупный веб-server.

  2. Tomcat способствует обмену данными между клиентом и сервлетом, обеспечивает программный контекст для веб-приложений, берет на себя функции идентификации и авторизации клиентов, создание сессий для каждого из них.

  3. 提供非常方便的JSP頁面管理。事實上,Web伺服器只能服務html。Jasper 是一個 Tomcat 元件,它將 JSP 頁面模板標籤中包含的程式碼編譯為用戶端接收的有效 HTML 檔案。所有範本邏輯都駐留在 Tomcat 中,可讓您為經典 HTML 表單新增甚至複雜的建構子。

最後:新手開發人員經常被問到這樣的問題:是否可以在沒有 main-method 的情況下執行 Java 應用程式。乍一看,如果你看看上面的例子,這是可能的。我們的 servlet 是在沒有 main. 然而,事實並非如此。Tomcat 有自己的方法 main,在伺服器啟動時呼叫。你可能會在面試時被問到這個問題。

附加連結:

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION