JavaRush /Java 博客 /Random-ZH /Java 中的 Tomcat

Java 中的 Tomcat

已在 Random-ZH 群组中发布
在某种程度上,每个开发人员都获得了足够的技能,他会考虑创建自己的项目,将自己的知识付诸实践。进行 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