vlambda博客
学习文章列表

读书笔记《apache-tomcat-7-essentials》配置和部署

Chapter 2. Configuration and Deployment

在上一章中,您已经在 DOS (Windows) 和非 DOS (Linux/Unix) 操作系统上安装了 Apache Tomcat 7。现在,是时候讨论不同 IT 行业使用的不同配置和部署策略工具了。

在本章中,我们将讨论以下主题:

  • Tomcat的配置

  • 虚拟目录的配置

  • 在 Tomcat 7 上部署应用程序

Configuration files and their usage

Apache Tomcat 7 带有一个默认设置,可以直接用于 QA 环境。我们可以根据环境规范自定义Tomcat;可以配置服务、服务器、引擎、连接器、领域和阀门等组件。 Tomcat 配置文件位于 conf 文件夹中。让我们讨论一下配置属性及其用法。

Tomcat 7 默认带有七个配置文件(通常为 XML 格式),这些文件对于根据环境需要自定义 Tomcat 非常有用。我们将安装在生产或开发环境中。

以下屏幕截图显示了 Tomcat 7 的配置目录的目录结构:

读书笔记《apache-tomcat-7-essentials》配置和部署

从管理员的角度来看,了解配置文件及其在 Tomcat 环境中的使用非常重要。我们来一一讨论配置属性,如下:

  • catalina.policy: 该文件描述了 Tomcat 7 的安全策略权限。它通过 JVM 对 Web 应用程序强制执行安全策略权限。

Note

catalina 使用 -security 选项执行时, catalina< /code> 文件被使用,Web 应用程序安全策略也被执行。

  • catalina.properties: 该文件包含服务器的共享定义、共享加载器和JAR,需要在服务器启动时进行扫描。

  • server.xml: 这是Tomcat的重要配置文件之一。它包含关键信息,例如 IP 地址、端口、虚拟主机、上下文路径等。

  • tomcat-users.xml: 该文件用于身份验证、授权和基于角色的定义。它用于实现用户/密码/角色的数据库,用于身份验证和容器管理的安全性。要添加/删除用户或为现有用户分配/取消分配角色,请编辑此文件。

  • logging.properties: 顾名思义,它定义了Tomcat实例的日志属性(例如启动日志)。

  • web.xml: 这定义了在 Tomcat 实例启动时加载到该 Tomcat 实例中的所有 Web 应用程序的默认值。如果 Web 应用程序有自己的部署描述符,则其内容将始终覆盖此默认描述符中指定的配置设置。

  • context.xml: 该文件的内容将随每个应用程序一起加载。会话持久性、Comet 连接跟踪等参数的配置都在这里完成。

Note

server.xml 文件中所做的任何更改都将在重新启动 Tomcat 实例后生效。

Note

应用程序级资源未在配置文件夹的 web.xml 中定义。最好在 application web.xml 中定义这些。

Configuration files and their usage


Apache Tomcat 7 带有一个默认设置,可以直接用于 QA 环境。我们可以根据环境规范自定义Tomcat;可以配置服务、服务器、引擎、连接器、领域和阀门等组件。 Tomcat 配置文件位于 conf 文件夹中。让我们讨论一下配置属性及其用法。

Tomcat 7 默认带有七个配置文件(通常为 XML 格式),这些文件对于根据环境需要自定义 Tomcat 非常有用。我们将安装在生产或开发环境中。

以下屏幕截图显示了 Tomcat 7 的配置目录的目录结构:

读书笔记《apache-tomcat-7-essentials》配置和部署

从管理员的角度来看,了解配置文件及其在 Tomcat 环境中的使用非常重要。我们来一一讨论配置属性,如下:

  • catalina.policy: 该文件描述了 Tomcat 7 的安全策略权限。它通过 JVM 对 Web 应用程序强制执行安全策略权限。

Note

catalina 使用 -security 选项执行时, catalina< /code> 文件被使用,Web 应用程序安全策略也被执行。

  • catalina.properties: 该文件包含服务器的共享定义、共享加载器和JAR,需要在服务器启动时进行扫描。

  • server.xml: 这是Tomcat的重要配置文件之一。它包含关键信息,例如 IP 地址、端口、虚拟主机、上下文路径等。

  • tomcat-users.xml: 该文件用于身份验证、授权和基于角色的定义。它用于实现用户/密码/角色的数据库,用于身份验证和容器管理的安全性。要添加/删除用户或为现有用户分配/取消分配角色,请编辑此文件。

  • logging.properties: 顾名思义,它定义了Tomcat实例的日志属性(例如启动日志)。

  • web.xml: 这定义了在 Tomcat 实例启动时加载到该 Tomcat 实例中的所有 Web 应用程序的默认值。如果 Web 应用程序有自己的部署描述符,则其内容将始终覆盖此默认描述符中指定的配置设置。

  • context.xml: 该文件的内容将随每个应用程序一起加载。会话持久性、Comet 连接跟踪等参数的配置都在这里完成。

Note

server.xml 文件中所做的任何更改都将在重新启动 Tomcat 实例后生效。

Note

应用程序级资源未在配置文件夹的 web.xml 中定义。最好在 application web.xml 中定义这些。

Configuration of Tomcat 7


到目前为止,我们已经讨论了 Tomcat 7 的各种配置文件。现在,有趣的部分从在实际系统或实时系统中实现这些文件开始。

Before we learn the details of the Tomcat server configuration, let's quickly understand how the web application works from the following steps:

  1. 1. 每当您点击 URL(例如,www.abc.com)时,浏览器将联系 DNS 服务器。

  2. 2. DNS 服务器将联系 ISP 以获取所需信息。

  3. 3. 一旦网络服务器接受来自客户端浏览器的请求,它将重定向到数据库服务器。

  4. 4. 反过来,数据库服务器将检索查询并将其响应回 Web 服务器。

  5. 5. Web 服务器然后将相同的响应转发给客户端浏览器,最后,客户端浏览器将内容显示给用户。

这就是网络浏览器获取网络服务器生成的内容的方式。下图解释了 Web 应用程序的功能和不同的组件,它们对应用程序的工作起着至关重要的作用:

读书笔记《apache-tomcat-7-essentials》配置和部署

DataSource configuration

对于任何 Web 应用程序,数据库都扮演着非常重要的角色,因为它是企业应用程序的骨干。为了使应用程序运行良好,需要在应用程序层进行正确的数据源配置。

在进一步讨论之前,让我们快速讨论一下 Web 应用程序如何从数据库服务器获取响应。

  1. 1. 每当您点击 URL(例如,www.abc.com)时,请求转到网络服务器。

  2. 2. Web 服务器一旦接受来自客户端浏览器的请求,就会根据查询来分析请求。如果它需要数据库 (DB) 响应,则它将请求重定向到数据库服务器。

  3. 3. 根据查询,数据库服务器将检索内容并响应 Web 服务器。然后,Web 服务器将来自数据库服务器的响应转发到客户端浏览器。

下图也解释了这个工艺流程:

读书笔记《apache-tomcat-7-essentials》配置和部署

经过前面所有的讨论,我们现在了解了数据库请求如何在 Web 应用程序中流动。现在,是时候对Tomcat 7的数据源进行实时配置了。数据库连接中使用的一些术语将在下面的内容中解释。

JDBC

Java Database Connectivity (JDBC) 是基于 Java 的数据访问技术是客户端访问服务器数据库的API。它面向关系数据库,提供查询和更新数据库的方法。

JNDI

Java 命名和目录接口 (JNDI) 服务是Java 平台的 API,它为使用 Java 编程语言编写的应用程序提供命名和目录功能。

DataSource

它是一个 Java 对象,用于通过 JDBC API 访问关系数据库。它在与 JNDI 集成时以及在向 JNDI 命名服务注册数据源对象之后运行良好。应用程序本身可以访问对象并连接到数据库。

以下是任何数据库服务器连接Tomcat 7与数据库所需的参数,也是配置数据源的先决条件:

  • IP地址

  • 端口号

  • JNDI 名称

  • 数据库用户 ID/密码

Note

生产中的数据库服务器

托管在互联网上的应用程序,其网络服务器始终配置在非军事区非军事区)。有关 DMZ 区域的更多信息,请参阅 http://en。 wikipedia.org/wiki/DMZ_(计算)。数据库服务器放置在内部网络中。在这种情况下,需要在 Web 服务器和数据库服务器之间打开防火墙端口以进行通信。

数据库连接池DBCP)配置位于< code class="literal"> TOMCAT_HOME 或 CATALINA_HOME/lib/tomcat-dbcp.jar。这个特定的 JAR 负责连接池。以下屏幕截图显示了 tomcat-dbcp.jar 的位置。以下是 Tomcat 7 服务器用于完成与数据库的连接的内置属性:

  • 数据库连接池

  • 常见的 DBCP 属性

读书笔记《apache-tomcat-7-essentials》配置和部署
  • server.xml 中的数据库服务器详细信息的配置

  • 数据库特定的 JAR 或 JDBC 驱动程序需要放在 lib 目录中

  • JNDI 应该在 application web.xml 文件中定义

  • 应用程序代码应定义正确的 JNDI 配置

市场上有许多数据库可用,每个数据库都有自己的优点和缺点。我们将讨论企业应用程序中最常用的数据库以及如何为这些数据库配置数据源。

DataSource 配置包括四个主要步骤,与使用的数据库无关。

DataSource for Oracle

Oracle 数据库因其特性而在 IT 市场占有主要份额。以下是您需要对 Tomcat 的数据源配置执行的步骤。

  1. 1. 默认情况下,数据源值的定义在 server.xml的全局部分中定义。以下屏幕截图显示了 server.xml 中的数据源详细信息:

    <!-- Global JNDI resources Documentation at /docs/jndi-resources- howto.html-->
    <GlobalNamingResources>
    <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users-->
    <Resource name="jdbc/tomcat7" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:test" description="test database for tomcat 7" username="admin" password="admin" maxActive="20" maxIdle="10" maxWait="-1"/>
    </GlobalNamingResources>
    
    读书笔记《apache-tomcat-7-essentials》配置和部署
  2. 2. Oracle JDBC驱动类应该放在Tomcat实例的 CATALINA_HOME/lib/文件夹中。对于Oracle,either class 12使用 .jar ojdbc14.jar

    Note

    默认情况下,Tomcat 只接受 *.jar。如果驱动是ZIP格式,则将其重命名为 .jar,然后部署到 jar目录下。根据环境使用的版本,可以通过链接免费下载Oracle JAR, http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html

    Note

    如果您已经安装了 Oracle 数据库版本 9i,那么您应该使用 oracle.jdbc.driver.OracleDriver 类进行 JDBC 连接,对于 9i 以上的版本,您应该使用< code class="literal"> oracle.jdbc.OracleDriver class. oracle.jdbc.driver.OracleDriver 已弃用,从下一个版本开始不再支持此驱动程序主要版本。

  3. 3. 定义文档类型定义DTD) 用于应用程序 web.xml 中的资源。管理员脑海中总会浮现一个问题,为什么我们不能在服务器 web.xml中定义应用特定的DTD? 这个问题的答案很棘手。部署应用程序时,它将为资源引用应用程序 web.xml,但不为服务器引用 web.xml . server web.xml 应该仅用于服务器属性更改,例如会话参数等,它引用特定于 Web/应用程序服务器。

    <resource-ref>
    <description>Oracle Datasource for tomcat </description>
    <res-ref-name>jdbc/tomcat7 </res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    
  4. 4. 在上一步之后,开发人员必须在他们的代码文件中引用 JNDI 并将其连接到数据库。

DataSource for MySQL

MySQL 是 Oracle 目前支持的最大的开源数据库之一。它遵循与 Oracle 相同的过程,但有一些参数有所不同。为 MySQL 配置数据源需要执行以下步骤:

  1. 1. 以下代码行在 server.xml中提供了datasource的定义。默认情况下,这些值是在global部分中定义的。

    <Resource name="jdbc/tomcat7" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="tomcatuser" password="tomcat" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/tomcat7"/>
    
  2. 2. 以下代码行为应用程序提供 web.xml 配置。这应该放在 WEB-INF/web.xml 上,用于特定于应用程序的内容。

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
    <description>Tomcat 7 test DB</description>
    <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/tomcat7</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    </web-app>
    
  3. 3. MySQL JDBC驱动部署在Tomcat的 CATALINA_HOME/lib/文件夹中。 MySQL 3.23.47 Connector/J 3.0.11-stable 是最常见和广泛使用的 JAR 文件。

    Note

    您可以从开源网站免费下载 MySQL JAR, http://dev.mysql。 com/downloads/

  4. 4. Tomcat 管理员应牢记的最重要的一点是,在 MySQL 中,应为 DB 服务器用户配置所有权限。登录到 MySQL 提示符并运行以下命令以授予

    mysql> GRANT ALL PRIVILEGES ON *.* TO tomcatuser@localhost IDENTIFIED BY 'tomcat7' WITH GRANT OPTION;
    mysql> create database tomcat7;
    mysql> use tomcat7;
    mysql> create table testdata ( id int not null auto_increment primary key,foo varchar(25), bar int);
    

    Note

    如果您创建没有密码的 MySQL 用户,则 JDBC 驱动程序将无法连接,并且您将在 catalina.out 中出现身份验证错误。

DataSource for PostgreSQL

PostgreSQL 是一个开源的关系型数据库。它是最古老的数据库之一(已有 15 年历史)。它可以安装在多种操作系统上,例如Windows、Unix、MAC等。

它有一个类似于 Oracle 的四步配置规则,如下所示:

  1. 1、以下代码在 server.xml中提供了datasource的定义。默认情况下,这些值在 global 部分中定义。

    <Resource name="jdbc/tomcat7" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/tomcat7" username="tomcat7" password="tomcat" maxActive="20" maxIdle="10" maxWait="-1"/>
    
  2. 2. PostgreSQL JDBC驱动部署在Tomcat的 CATALINA_HOME/lib/postgresql-9.0-801.jdbc3.jar文件夹中。

    Note

    根据版本,应下载 JDBC 驱动程序。更多驱动版本参考,请参考 http://jdbc.postgresql.org/下载.html

  3. 3. 对于应用程序的 web.xml 配置,使用以下代码行。这应该放在 WEB-INF/web.xml 中,用于特定于应用程序的内容。

    <resource-ref>
    <description>postgreSQL Tomcat datasource </description>
    <res-ref-name>jdbc/tomcat7 </res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    

在这些步骤结束时,开发人员将在他/她的代码文件中引用 JNDI 并连接到数据库。

Comparison of the datasource for common databases


到目前为止,我们已经看到了数据源是如何在不同的数据库上配置的。让我们快速比较一下,找出每个数据库有哪些不同的语法:

  • Oracle: 下面提到的代码描述了 Oracle 数据库的数据源参数:

    <Resource name="jdbc/tomcat7" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:test" description="test database for tomcat 7" username="admin" password="admin" maxActive="20" maxIdle="10" maxWait="-1"/>
    
    
  • MySQL: 下面提到的代码描述了 MySQL 数据库的数据源参数:

    <Resource name="jdbc/tomcat7" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/tomcat7" username="tomcat7" password="tomcat" maxActive="20" maxIdle="10" maxWait="-1"/>
    
  • PostgreSQL: 下面提到的代码描述了 PostgreSQL 数据库的数据源参数:

    <Resource name="jdbc/tomcat7" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/tomcat7" username="tomcat7" password="tomcat" maxActive="20" maxIdle="10" maxWait="-1"/>
    
    读书笔记《apache-tomcat-7-essentials》配置和部署

在上图中,我们为每个数据库定义了每个 driverClassName、端口和JDBC驱动,并列表得出结论,如果您知道与数据库连接的详细信息,您可以配置任何新数据库都非常容易。

Note

每个供应商都有一组预定义的库,您可以通过它们连接到其数据库。如果您需要连接到此处未提及的任何其他数据库,则可以访问供应商网站以获取支持信息。

Tomcat Manager configuration

Tomcat 管理器是一个非常强大的 Tomcat 管理工具。在生产服务器问题中,不可能一直都在数据中心。有时,我们必须远程连接到 Tomcat 来解决问题,这时 Tomcat 管理器对于处理关键问题非常有用。它具有以下功能:

  • 远程部署新应用程序

  • 空闲会话清除

  • 在不重新启动容器的情况下取消部署应用程序

  • 内存泄漏分析

  • JVM 状态

  • 服务器状态

Enabling the Tomcat Manager

默认情况下,Tomcat 7 中禁用了 Tomcat 管理器。要启用 Tomcat 管理器,您必须在默认文件中进行配置,即 tomcat-users.xml 中Tomcat 7 的 conf 文件夹。

在此文件中,配置了用户角色及其身份验证。让我们快速讨论启用 Tomcat 管理器的配置参数。

在启用 Tomcat 管理器之前,浏览 Tomcat 页面时会弹出一个认证窗口,如下图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

以下屏幕截图显示了启用用户属性之前的 tomcat-users.xml 部分:

读书笔记《apache-tomcat-7-essentials》配置和部署

启用 Tomcat 管理器后,用户将在命令提示符中收到一条消息,如下图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

默认情况下,Tomcat 7 带有两个用户, tomcat role1。如果您想根据您的系统要求添加更多用户,您可以在此处添加并定义角色。一旦启用Tomcat用户配置,该配置将在Tomcat回收后生效。

您可以使用 URL http://localhost:8080/ 浏览 Tomcat Manager 并点击 Manager App< /span>,如下图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

显示身份验证页面后,提供已定义的用户 ID/密码(user = admin,password = admin)在 tomcat-users.xml。点击确定。弹出窗口会将其重定向到 Tomcat 管理器控制台,如以下屏幕截图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

通过这个控制台,我们可以部署新的应用程序或者修改当前应用程序的状态来停止、取消部署、启动、重新加载、清除会话等。另外,我们可以通过点击 Server Status来查看服务器的当前状态,如下图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

以下屏幕截图显示了服务器状态:

读书笔记《apache-tomcat-7-essentials》配置和部署

服务器状态将定义以下详细信息:

  • JVM 状态

    • 最大内存

    • 总内存

    • 空闲内存

  • AJP 端口 8009 的连接

    • 连接状态

    • 发送的数据

    • 收到的数据

    • 客户

    • 虚拟主机

  • HTTP 端口 8080 上的连接

    • 连接状态

    • 发送的数据

    • 收到的数据

    • 客户

    • 虚拟主机

  • 服务器信息

    • 雄猫版本

    • 操作系统版本

    • JVM版本

    • 系统架构

Context path

上下文路径是 Web 应用程序的关键元素。它也用于虚拟主机。虚拟主机可以定义为一种方法,您可以通过该方法在同一 Web 服务器或单个 IP 上托管多个域名。

上下文路径还用于定义 .war 文件的 URL 映射。

很多人问我们为什么需要上下文路径。相反,我们可以将应用程序部署在一个根目录上吗?答案是,通过定义上下文路径,我们可以最大限度地减少服务器上的负载。当服务器收到带有 URL 的请求时,它将检查 server.xml 或定义 URL 的上下文路径。如果找到,则将从此处提供 URL,否则服务器必须搜索所有已部署的 WAR 文件。因此,上下文路径减少了 CPU 周期。

第二个重要的优势是,它让我们可以根据自己的需求自由定制应用程序,例如日志记录、appBase、数据库连接等。

让我们考虑一个大型企业的场景,其中单个应用程序需要部署在 100 台 Tomcat 服务器上。现在不可能在每台服务器上部署应用程序,因此,在这种情况下,通用 NAS 共享用于应用程序部署。

Enabling the context path

Tomcat中的上下文路径可以通过两种方式启用:

  • 使用 Tomcat Web 应用程序管理器的 GUI

  • server.xml 中的命令行配置

GUI using the Tomcat Web Application Manager

要在 Tomcat 管理器中启用上下文路径,您必须首先使用 URL http://localhost:8080 登录到 Tomcat 管理器应用程序。然后点击Manager App,如下截图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

然后它会显示 Tomcat Web Application Manager 控制台及其功能,如以下屏幕截图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署

您可以使用 Deploy 选项卡创建上下文路径。单击 Browse 并选择所需的WAR 文件。然后点击部署。部署应用程序需要 10 到 15 秒,您将看到类似于以下屏幕截图的页面:

读书笔记《apache-tomcat-7-essentials》配置和部署

以下屏幕截图显示了应用程序部署状态和管理控件,例如停止、重新加载取消部署:

读书笔记《apache-tomcat-7-essentials》配置和部署

应用部署成功后,您可以使用 URL http://localhost:8080/sample 浏览应用,如以下屏幕截图所示:

读书笔记《apache-tomcat-7-essentials》配置和部署
Command-line configuration in server.xml

在 Tomcat 7 中添加上下文路径的另一种方法是编辑 server.xml。但是,您需要对 XML 有很好的理解。让我们快速讨论一下需要在 Tomcat 服务器上进行的更改。

<Context path="/sample" docBase="/opt/" reloadable="true" swallowOutput="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>
读书笔记《apache-tomcat-7-essentials》配置和部署

现在,是时候讨论上下文路径中定义的参数了。上一个屏幕截图显示了上下文路径的详细信息。

  • path="/sample": 定义服务器请求的路径URL,例如 http://localhost:8080/sample< /代码>。

  • docBase="/opt/": 它定义了上下文路径的文档根。简单来说,此参数定义部署 .war 文件的获取位置。

  • reloadable="true": 如果此参数为 true,那么对WAR文件所做的每一次更改都会自动生效,无需Tomcat 回收。

  • swallowOutput="true":如果这个参数设置为true,那么 System.outSystem.err 将被重定向到应用程序日志。

Note

始终建议在 Tomcat 中执行更改之前备份现有配置文件。

Deployment in Tomcat 7


部署基本上定义为在 Web 应用程序中安装 WAR 文件。也就是说,我们可以在Tomcat webapps目录下定义WAR文件的解包。

Structure of the WebArchive

您在指定的目录结构中开发 Web 应用程序,以便可以在 Tomcat 7 上存档和部署它。属于 Web 应用程序的所有 servlet、类、静态文件和其他资源都组织在目录层次结构下。此层次结构的根定义了您的 Web 应用程序的文档根。此根目录下的所有文件都可以提供给客户端,除了位于根目录下的特殊目录 WEB-INF 下的文件。您的 Web 应用程序的名称用于解析对应用程序组件的请求。

Note

始终将私有文件(不需要提供给客户端的文件)放在 WEB-INF 目录下, root目录。 WEB-INF 下的所有文件都是私有的,不提供给客户端。

  • WebApplicationName/:在这个目录(或一个子目录)中,放置了所有的静态文件,例如HTML和JSP文件。此目录是您的 Web 应用程序的文档根目录。

  • /WEB-INF/web.xml: 它包含 Web 应用程序的部署描述符。特定于应用程序的资源放置在此处。

  • /WEB-INF/classes: 这包含所有服务器端类或您的应用程序特定的第三方类。

  • /WEB-INF/lib: 此目录包含用于 JSP 完成的 JAR 文件。

  • web.xml: 它包含所有动态文件(servlet 和 JSP)的详细信息以及其他与配置相关的信息,例如会话超时和定义数据源(访问数据库)。

    <servlet>
    <servlet-name>classB</servlet-name>
    <servlet-class>class.classB</servlet-class>
    </servlet>
    

    在前面的代码片段中,我们将名称映射到 servlet 类(当 Tomcat 7 启动时,它将创建该类的一个对象并将其映射到我们在 servlet-name 中提供的名称 字段)。

    classB =new class.classB ()
    <servlet-mapping>
    <servlet-name> classB </servlet-name>
    

Archive Files

在大多数生产环境中,您会从开发人员那里收到一个作为存档文件的部署单元。归档文件是包含应用程序或模块的所有类、静态文件、目录和部署描述符文件的单个文件。归档文件通常使用 JAR 实用程序或 Ant JAR 工具创建。

使用 JAR 实用程序打包的部署单元具有特定的文件扩展名,具体取决于类型,如下几点所述:

  • EJB 被打包为 .jar 文件

  • Web 应用程序打包为 .war 文件

  • 资源适配器打包为 .rar 文件

  • 企业应用程序被打包为 .ear 文件,并且可以包含 EJB、Web 应用程序和资源适配器的任意组合

  • Web 服务可以打包为 .ear 文件或 .war 文件

Exploded archive directories

展开的存档目录包含与 JAR 存档相同的文件和目录。但是,文件和目录直接驻留在文件系统中,不会使用 JAR 实用程序打包到单个存档文件中。

在以下情况下,部署单元应部署为展开的存档目录,而不是单个存档文件:

  • 您希望在不重新部署整个应用程序的情况下对已部署的应用程序执行部分更新。

  • 您希望使用 Tomcat 管理器来动态编辑和保留部署的选定部署描述符值。

Note

无法在控制台中编辑来自存档文件或 .war 文件的部署的部署描述符值。

  • 您正在部署一个包含您将定期更新的静态文件的 Web 应用程序。在这种情况下,将应用程序部署为展开目录会更容易,因为您可以更新和刷新静态文件,而无需重新创建存档。

Deployment operations

部署工具支持执行这些常见的部署操作:

  • 部署:它使部署源文件可用于目标服务器并将类加载到类加载器中,以便客户端可以使用应用程序。

  • 重新部署: 它更新部署单元或部署单元的一部分(例如,WAR、WAR 中的模块或Web 应用程序),当前已部署并可供客户端使用。重新部署整个应用程序时,必须成功重新部署应用程序的所有模块,否则整个应用程序将停止。

Note

在重新部署期间,客户端无法使用应用程序。如果此时有来自客户端的访问,Tomcat 7 服务器不保证应用程序和部署任务的运行。因此,不建议在生产环境中使用重新部署。

  • 停止: 这会卸载应用程序的类并使应用程序对客户端不可用。停止后,部署文件和部署名称仍可供目标服务器使用,以供后续重新部署或启动。

  • 开始: 它将应用程序的类重新加载到类加载器中并使应用程序可供客户端使用。由于较早的部署,启动要求部署文件在目标服务器上可用。

  • 取消部署:这会停止部署单元,然后从目标服务器中删除其部署文件和部署名称。

Note

在取消部署期间,客户端无法使用应用程序。如果此时有来自客户端的访问,Tomcat 7 服务器不保证应用程序和部署任务的运行。

Types of deployment


部署登台模式确定部署文件如何提供给必须部署应用程序或独立模块的目标服务器。 Tomcat 7 服务器提供三种不同的暂存文件选项,如下所示:

  • 舞台模式

  • Nostage模式

  • external_stage 模式

下表描述了使用不同部署暂存模式的行为和最佳实践:

部署分段模式

行为

何时使用

舞台

Tomcat 管理员首先将部署单元源文件复制到目标服务器的暂存目录,然后目标服务器使用其本地部署文件副本部署它们。

将小型或中型应用程序部署到多个 Tomcat 7 服务器实例。

将小型或中型应用程序部署到集群。

Nostage

Tomcat 管理员不会复制部署单元文件。相反,所有服务器都使用部署文件的相同物理副本进行部署,Tomcat 管理员和目标服务器必须可以直接访问这些副本。

不建议对已展开的归档目录进行 Nostage 部署

部署到单个服务器实例。

部署到多宿主机器上的集群。

将非常大的应用程序部署到多个目标或部署文件放置在服务器上的集群。

External_stage

Tomcat 管理员不会复制部署文件。相反,管理员必须确保在部署之前将部署文件分发到正确的暂存目录位置(例如,通过在部署之前手动复制文件)。

对于 external_stage 部署,Tomcat 管理员需要一份部署文件的副本以进行验证。驻留在目标服务器的暂存目录中的部署文件的副本在部署之前未经过验证。

您希望手动控制将部署文件分发到目标服务器的部署。

部署到第三方应用程序或脚本管理将部署文件复制到正确暂存目录的服务器实例。

不需要通过 Tomcat 管理器动态更新选定部署描述符的部署(external_stage 模式不支持)。

不需要部分重新部署应用程序组件的部署。

Ways of application deployment in Tomcat 7

在 Tomcat 7 中可以通过多种方式部署应用程序。下图显示了在各个行业中广为人知和接受的五种不同方式:

读书笔记《apache-tomcat-7-essentials》配置和部署
  • War部署:可以在Tomcat的 CATALINA_BASE目录下部署WAR文件,重启Tomcat即可查看应用程序。这种方式在生产环境中被广泛使用。

  • 解压部署:在这种部署方法中,WAR文件被解压到 CATALINA_BASE目录中实例。此方法常用于开发服务器。

  • Tomcat Manager:这是一个非常好的工具,广泛用于生产环境,主要用于远程基础设施部署。您可以从系统登录到 Tomcat 浏览器并进行部署。然后点击新的 web 应用部署,如下图所示:

    读书笔记《apache-tomcat-7-essentials》配置和部署
    • 您可以使用 Deploy 选项卡创建上下文路径。单击 Browse 并选择所需的WAR 文件。然后点击部署。部署应用程序需要 10 到 15 秒,您将看到类似于以下屏幕截图的页面:

      读书笔记《apache-tomcat-7-essentials》配置和部署
    • 以下屏幕截图显示了应用程序部署状态和管理控制,例如停止、重新加载取消部署:

      读书笔记《apache-tomcat-7-essentials》配置和部署
    • 成功部署应用程序后,如下图所示,您可以使用 URL http://localhost:8080/sample:

      读书笔记《apache-tomcat-7-essentials》配置和部署
  • 使用 ANT 脚本:您还可以使用 ANT 脚本部署应用程序。这些脚本包含源/目标和目标文件的信息。为了进行此部署,Tomcat 实例应该正在运行。

  • TCD (Tomcat Deployer):这是一个工具用于应用程序部署。应安装 ANT 以使 TCD 正常工作并且 Tomcat 实例应运行。 Tomcat实例无需安装TCD。

Common issues in deployment, configuration, and their troubleshooting


在 Tomcat 上部署和配置后可能会出现多个问题。让我们讨论不同的问题:

场景 1:

问题:用户抱怨部署后仍然可以查看旧代码。

故障排除步骤:

  • 检查文档库中是否存在最新文件。

  • 查看Tomcat 7的 logs目录下的 catalina.out,是否部署了WAR文件名。

  • 如果都勾选了,问题依旧,则停止Tomcat服务并清除 work/Catalina/localhost下 temp目录的内容 使用以下命令:

cd /opt/apache-tomcat-7.0.12/temp/ rm -rf ../temp/*
cd /opt/apache-tomcat-7.0.12/work/Catalina/localhost/ rm -rf ../localhost/*
  • 重新启动 Tomcat 服务并要求用户测试应用程序。

场景 2:

问题: 用户抱怨在一个节点上可以查看当前部署的代码,而另一个节点仍然显示之前版本的代码。

故障排除步骤:

  • 检查文档库中是否存在最新文件。

  • 查看Tomcat 7的 logs目录下的 catalina.out,是否部署了WAR文件名。

    如果两者都被检查并且问题仍然存在,则停止 node2 上的 Tomcat 服务。从node1复制代码,使用以下命令清除work/Catalina/localhosttemp目录的内容:

cd /opt/apache-tomcat-7.0.12/temp/ rm -rf ../temp/*
cd /opt/apache-tomcat-7.0.12/work/Catalina/localhost/ rm -rf ../localhost/*
  • 重新启动 Tomcat 服务并要求用户测试应用程序。此外,检查 node1 和 node2 上的数据库状态,如果它们正在复制中。

  • 从两个节点连接数据库。

场景 3:

问题: server.xml 进行更改后,Tomcat 实例没有出现。

故障排除步骤:

  • 转到 Tomcat bin 目录。

  • 然后,运行 configtest.sh。它将为您提供以下输出:

[root@localhost ~]# cd /opt/apache-tomcat-7.0.12/bin/
[root@localhost bin]# ./configtest.sh
Using CATALINA_BASE: /opt/apache-tomcat-7.0.12
Using CATALINA_HOME: /opt/apache-tomcat-7.0.12
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.12/temp
Using JRE_HOME: /opt/jdk1.6.0_24
Using CLASSPATH: /opt/apache-tomcat-7.0.12/bin/bootstrap.jar:/opt/apache-tomcat-7.0.12/bin/tomcat-juli.jar
Error:-
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:435)
Caused by: java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
at java.net.ServerSocket.bind(ServerSocket.java:328)
at java.net.ServerSocket.<init>(ServerSocket.java:194)
at java.net.ServerSocket.<init>(ServerSocket.java:150)
  • 这意味着Tomcat已经在运行。然后,停止 Web 服务器并清除 temp 目录。

  • 再次重启服务。

Summary


在本章中,我们讨论了 Tomcat 的配置,包括不同数据库(Oracle、MySQL 和 PostgreSQL)的数据源配置和使用示例应用程序创建上下文路径,执行部署的各种方法,包括使用 Tomcat 管理器进行部署示例应用程序。我们还讨论了常见问题的故障排除。

在下一章中,我们将从 JVM 和操作系统级别讨论 Tomcat 7 的性能调优。