读书笔记《apache-tomcat-7-essentials》配置和部署
在上一章中,您已经在 DOS (Windows) 和非 DOS (Linux/Unix) 操作系统上安装了 Apache Tomcat 7。现在,是时候讨论不同 IT 行业使用的不同配置和部署策略工具了。
在本章中,我们将讨论以下主题:
Tomcat的配置
虚拟目录的配置
在 Tomcat 7 上部署应用程序
Apache Tomcat 7 带有一个默认设置,可以直接用于 QA 环境。我们可以根据环境规范自定义Tomcat;可以配置服务、服务器、引擎、连接器、领域和阀门等组件。 Tomcat 配置文件位于 conf
文件夹中。让我们讨论一下配置属性及其用法。
Tomcat 7 默认带有七个配置文件(通常为 XML 格式),这些文件对于根据环境需要自定义 Tomcat 非常有用。我们将安装在生产或开发环境中。
以下屏幕截图显示了 Tomcat 7 的配置目录的目录结构:
从管理员的角度来看,了解配置文件及其在 Tomcat 环境中的使用非常重要。我们来一一讨论配置属性,如下:
server.xml:
这是Tomcat的重要配置文件之一。它包含关键信息,例如 IP 地址、端口、虚拟主机、上下文路径等。tomcat-users.xml:
该文件用于身份验证、授权和基于角色的定义。它用于实现用户/密码/角色的数据库,用于身份验证和容器管理的安全性。要添加/删除用户或为现有用户分配/取消分配角色,请编辑此文件。web.xml:
这定义了在 Tomcat 实例启动时加载到该 Tomcat 实例中的所有 Web 应用程序的默认值。如果 Web 应用程序有自己的部署描述符,则其内容将始终覆盖此默认描述符中指定的配置设置。context.xml:
该文件的内容将随每个应用程序一起加载。会话持久性、Comet 连接跟踪等参数的配置都在这里完成。
Apache Tomcat 7 带有一个默认设置,可以直接用于 QA 环境。我们可以根据环境规范自定义Tomcat;可以配置服务、服务器、引擎、连接器、领域和阀门等组件。 Tomcat 配置文件位于 conf
文件夹中。让我们讨论一下配置属性及其用法。
Tomcat 7 默认带有七个配置文件(通常为 XML 格式),这些文件对于根据环境需要自定义 Tomcat 非常有用。我们将安装在生产或开发环境中。
以下屏幕截图显示了 Tomcat 7 的配置目录的目录结构:
从管理员的角度来看,了解配置文件及其在 Tomcat 环境中的使用非常重要。我们来一一讨论配置属性,如下:
server.xml:
这是Tomcat的重要配置文件之一。它包含关键信息,例如 IP 地址、端口、虚拟主机、上下文路径等。tomcat-users.xml:
该文件用于身份验证、授权和基于角色的定义。它用于实现用户/密码/角色的数据库,用于身份验证和容器管理的安全性。要添加/删除用户或为现有用户分配/取消分配角色,请编辑此文件。web.xml:
这定义了在 Tomcat 实例启动时加载到该 Tomcat 实例中的所有 Web 应用程序的默认值。如果 Web 应用程序有自己的部署描述符,则其内容将始终覆盖此默认描述符中指定的配置设置。context.xml:
该文件的内容将随每个应用程序一起加载。会话持久性、Comet 连接跟踪等参数的配置都在这里完成。
到目前为止,我们已经讨论了 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. 每当您点击 URL(例如,www.abc.com)时,浏览器将联系 DNS 服务器。
2. DNS 服务器将联系 ISP 以获取所需信息。
3. 一旦网络服务器接受来自客户端浏览器的请求,它将重定向到数据库服务器。
4. 反过来,数据库服务器将检索查询并将其响应回 Web 服务器。
5. Web 服务器然后将相同的响应转发给客户端浏览器,最后,客户端浏览器将内容显示给用户。
这就是网络浏览器获取网络服务器生成的内容的方式。下图解释了 Web 应用程序的功能和不同的组件,它们对应用程序的工作起着至关重要的作用:
对于任何 Web 应用程序,数据库都扮演着非常重要的角色,因为它是企业应用程序的骨干。为了使应用程序运行良好,需要在应用程序层进行正确的数据源配置。
在进一步讨论之前,让我们快速讨论一下 Web 应用程序如何从数据库服务器获取响应。
1. 每当您点击 URL(例如,www.abc.com)时,请求转到网络服务器。
2. Web 服务器一旦接受来自客户端浏览器的请求,就会根据查询来分析请求。如果它需要数据库 (DB) 响应,则它将请求重定向到数据库服务器。
3. 根据查询,数据库服务器将检索内容并响应 Web 服务器。然后,Web 服务器将来自数据库服务器的响应转发到客户端浏览器。
下图也解释了这个工艺流程:
经过前面所有的讨论,我们现在了解了数据库请求如何在 Web 应用程序中流动。现在,是时候对Tomcat 7的数据源进行实时配置了。数据库连接中使用的一些术语将在下面的内容中解释。
它是一个 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 属性
server.xml
中的数据库服务器详细信息的配置数据库特定的 JAR 或 JDBC 驱动程序需要放在
lib
目录中JNDI 应该在 application
web.xml
文件中定义应用程序代码应定义正确的 JNDI 配置
市场上有许多数据库可用,每个数据库都有自己的优点和缺点。我们将讨论企业应用程序中最常用的数据库以及如何为这些数据库配置数据源。
DataSource 配置包括四个主要步骤,与使用的数据库无关。
Oracle 数据库因其特性而在 IT 市场占有主要份额。以下是您需要对 Tomcat 的数据源配置执行的步骤。
1. 默认情况下,数据源值的定义在
server.xml
的全局部分中定义。以下屏幕截图显示了server.xml 中的数据源详细信息:
2. Oracle JDBC驱动类应该放在Tomcat实例的
CATALINA_HOME/lib/
文件夹中。对于Oracle,either class12使用 .jar
或ojdbc14.jar
。Note
默认情况下,Tomcat 只接受
*.jar
。如果驱动是ZIP格式,则将其重命名为.jar
,然后部署到jar
目录下。根据环境使用的版本,可以通过链接免费下载Oracle JAR, http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html。3. 定义文档类型定义(DTD) 用于应用程序
web.xml
中的资源。管理员脑海中总会浮现一个问题,为什么我们不能在服务器web.xml中定义应用特定的DTD?
这个问题的答案很棘手。部署应用程序时,它将为资源引用应用程序web.xml
,但不为服务器引用web.xml
. serverweb.xml
应该仅用于服务器属性更改,例如会话参数等,它引用特定于 Web/应用程序服务器。4. 在上一步之后,开发人员必须在他们的代码文件中引用 JNDI 并将其连接到数据库。
MySQL 是 Oracle 目前支持的最大的开源数据库之一。它遵循与 Oracle 相同的过程,但有一些参数有所不同。为 MySQL 配置数据源需要执行以下步骤:
1. 以下代码行在
server.xml
中提供了datasource的定义。默认情况下,这些值是在global部分中定义的。2. 以下代码行为应用程序提供
web.xml
配置。这应该放在WEB-INF/web.xml
上,用于特定于应用程序的内容。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. Tomcat 管理员应牢记的最重要的一点是,在 MySQL 中,应为 DB 服务器用户配置所有权限。登录到 MySQL 提示符并运行以下命令以授予
PostgreSQL 是一个开源的关系型数据库。它是最古老的数据库之一(已有 15 年历史)。它可以安装在多种操作系统上,例如Windows、Unix、MAC等。
它有一个类似于 Oracle 的四步配置规则,如下所示:
1、以下代码在
server.xml
中提供了datasource的定义。默认情况下,这些值在 global 部分中定义。2. PostgreSQL JDBC驱动部署在Tomcat的
CATALINA_HOME/lib/postgresql-9.0-801.jdbc3.jar
文件夹中。Note
根据版本,应下载 JDBC 驱动程序。更多驱动版本参考,请参考 http://jdbc.postgresql.org/下载.html。
3. 对于应用程序的
web.xml
配置,使用以下代码行。这应该放在WEB-INF/web.xml
中,用于特定于应用程序的内容。
在这些步骤结束时,开发人员将在他/她的代码文件中引用 JNDI 并连接到数据库。
到目前为止,我们已经看到了数据源是如何在不同的数据库上配置的。让我们快速比较一下,找出每个数据库有哪些不同的语法:
在上图中,我们为每个数据库定义了每个 driverClassName
、端口和JDBC驱动,并列表得出结论,如果您知道与数据库连接的详细信息,您可以配置任何新数据库都非常容易。
Tomcat 管理器是一个非常强大的 Tomcat 管理工具。在生产服务器问题中,不可能一直都在数据中心。有时,我们必须远程连接到 Tomcat 来解决问题,这时 Tomcat 管理器对于处理关键问题非常有用。它具有以下功能:
远程部署新应用程序
空闲会话清除
在不重新启动容器的情况下取消部署应用程序
内存泄漏分析
JVM 状态
服务器状态
默认情况下,Tomcat 7 中禁用了 Tomcat 管理器。要启用 Tomcat 管理器,您必须在默认文件中进行配置,即 tomcat-users.xml
中Tomcat 7 的 conf
文件夹。
在此文件中,配置了用户角色及其身份验证。让我们快速讨论启用 Tomcat 管理器的配置参数。
在启用 Tomcat 管理器之前,浏览 Tomcat 页面时会弹出一个认证窗口,如下图所示:
以下屏幕截图显示了启用用户属性之前的 tomcat-users.xml
部分:
启用 Tomcat 管理器后,用户将在命令提示符中收到一条消息,如下图所示:
默认情况下,Tomcat 7 带有两个用户, tomcat
和 role1
。如果您想根据您的系统要求添加更多用户,您可以在此处添加并定义角色。一旦启用Tomcat用户配置,该配置将在Tomcat回收后生效。
您可以使用 URL http://localhost:8080/
浏览 Tomcat Manager 并点击 Manager App< /span>,如下图所示:
显示身份验证页面后,提供已定义的用户 ID/密码(user = admin
,password = admin
)在 tomcat-users.xml
。点击确定。弹出窗口会将其重定向到 Tomcat 管理器控制台,如以下屏幕截图所示:
通过这个控制台,我们可以部署新的应用程序或者修改当前应用程序的状态来停止、取消部署、启动、重新加载、清除会话等。另外,我们可以通过点击 Server Status来查看服务器的当前状态,如下图所示:
以下屏幕截图显示了服务器状态:
上下文路径是 Web 应用程序的关键元素。它也用于虚拟主机。虚拟主机可以定义为一种方法,您可以通过该方法在同一 Web 服务器或单个 IP 上托管多个域名。
上下文路径还用于定义 .war
文件的 URL 映射。
很多人问我们为什么需要上下文路径。相反,我们可以将应用程序部署在一个根目录上吗?答案是,通过定义上下文路径,我们可以最大限度地减少服务器上的负载。当服务器收到带有 URL 的请求时,它将检查 server.xml
或定义 URL 的上下文路径。如果找到,则将从此处提供 URL,否则服务器必须搜索所有已部署的 WAR 文件。因此,上下文路径减少了 CPU 周期。
第二个重要的优势是,它让我们可以根据自己的需求自由定制应用程序,例如日志记录、appBase、数据库连接等。
让我们考虑一个大型企业的场景,其中单个应用程序需要部署在 100 台 Tomcat 服务器上。现在不可能在每台服务器上部署应用程序,因此,在这种情况下,通用 NAS 共享用于应用程序部署。
使用 Tomcat Web 应用程序管理器的 GUI
server.xml
中的命令行配置
要在 Tomcat 管理器中启用上下文路径,您必须首先使用 URL http://localhost:8080
登录到 Tomcat 管理器应用程序。然后点击Manager App,如下截图所示:
然后它会显示 Tomcat Web Application Manager 控制台及其功能,如以下屏幕截图所示:
您可以使用 Deploy 选项卡创建上下文路径。单击 Browse 并选择所需的WAR 文件。然后点击部署。部署应用程序需要 10 到 15 秒,您将看到类似于以下屏幕截图的页面:
Note
下载示例代码
您可以从 http://www 的帐户下载您购买的所有 Packt 书籍的示例代码文件。 packtpub.com。如果您在其他地方购买了这本书,您可以访问 http://www.packtpub.com/support< /a> 并注册以将文件直接通过电子邮件发送给您
以下屏幕截图显示了应用程序部署状态和管理控件,例如停止、重新加载和取消部署:
应用部署成功后,您可以使用 URL http://localhost:8080/sample
浏览应用,如以下屏幕截图所示:
部署基本上定义为在 Web 应用程序中安装 WAR 文件。也就是说,我们可以在Tomcat webapps
目录下定义WAR文件的解包。
您在指定的目录结构中开发 Web 应用程序,以便可以在 Tomcat 7 上存档和部署它。属于 Web 应用程序的所有 servlet、类、静态文件和其他资源都组织在目录层次结构下。此层次结构的根定义了您的 Web 应用程序的文档根。此根目录下的所有文件都可以提供给客户端,除了位于根目录下的特殊目录 WEB-INF
下的文件。您的 Web 应用程序的名称用于解析对应用程序组件的请求。
WebApplicationName/:在这个目录(或一个子目录)中,放置了所有的静态文件,例如HTML和JSP文件。此目录是您的 Web 应用程序的文档根目录。
/WEB-INF/web.xml:
它包含 Web 应用程序的部署描述符。特定于应用程序的资源放置在此处。/WEB-INF/classes:
这包含所有服务器端类或您的应用程序特定的第三方类。web.xml:
它包含所有动态文件(servlet 和 JSP)的详细信息以及其他与配置相关的信息,例如会话超时和定义数据源(访问数据库)。在前面的代码片段中,我们将名称映射到 servlet 类(当 Tomcat 7 启动时,它将创建该类的一个对象并将其映射到我们在
servlet-name 中提供的名称
字段)。
在大多数生产环境中,您会从开发人员那里收到一个作为存档文件的部署单元。归档文件是包含应用程序或模块的所有类、静态文件、目录和部署描述符文件的单个文件。归档文件通常使用 JAR 实用程序或 Ant JAR 工具创建。
使用 JAR 实用程序打包的部署单元具有特定的文件扩展名,具体取决于类型,如下几点所述:
展开的存档目录包含与 JAR 存档相同的文件和目录。但是,文件和目录直接驻留在文件系统中,不会使用 JAR 实用程序打包到单个存档文件中。
在以下情况下,部署单元应部署为展开的存档目录,而不是单个存档文件:
您希望在不重新部署整个应用程序的情况下对已部署的应用程序执行部分更新。
您希望使用 Tomcat 管理器来动态编辑和保留部署的选定部署描述符值。
您正在部署一个包含您将定期更新的静态文件的 Web 应用程序。在这种情况下,将应用程序部署为展开目录会更容易,因为您可以更新和刷新静态文件,而无需重新创建存档。
部署登台模式确定部署文件如何提供给必须部署应用程序或独立模块的目标服务器。 Tomcat 7 服务器提供三种不同的暂存文件选项,如下所示:
舞台模式
Nostage模式
external_stage 模式
下表描述了使用不同部署暂存模式的行为和最佳实践:
部署分段模式 |
行为 |
何时使用 |
---|---|---|
舞台 |
Tomcat 管理员首先将部署单元源文件复制到目标服务器的暂存目录,然后目标服务器使用其本地部署文件副本部署它们。 |
将小型或中型应用程序部署到多个 Tomcat 7 服务器实例。 将小型或中型应用程序部署到集群。 |
Nostage |
Tomcat 管理员不会复制部署单元文件。相反,所有服务器都使用部署文件的相同物理副本进行部署,Tomcat 管理员和目标服务器必须可以直接访问这些副本。 不建议对已展开的归档目录进行 Nostage 部署 |
部署到单个服务器实例。 部署到多宿主机器上的集群。 将非常大的应用程序部署到多个目标或部署文件放置在服务器上的集群。 |
External_stage |
Tomcat 管理员不会复制部署文件。相反,管理员必须确保在部署之前将部署文件分发到正确的暂存目录位置(例如,通过在部署之前手动复制文件)。 对于 external_stage 部署,Tomcat 管理员需要一份部署文件的副本以进行验证。驻留在目标服务器的暂存目录中的部署文件的副本在部署之前未经过验证。 |
您希望手动控制将部署文件分发到目标服务器的部署。 部署到第三方应用程序或脚本管理将部署文件复制到正确暂存目录的服务器实例。 不需要通过 Tomcat 管理器动态更新选定部署描述符的部署(external_stage 模式不支持)。 不需要部分重新部署应用程序组件的部署。 |
在 Tomcat 7 中可以通过多种方式部署应用程序。下图显示了在各个行业中广为人知和接受的五种不同方式:
War部署:可以在Tomcat的
CATALINA_BASE
目录下部署WAR文件,重启Tomcat即可查看应用程序。这种方式在生产环境中被广泛使用。Tomcat Manager:这是一个非常好的工具,广泛用于生产环境,主要用于远程基础设施部署。您可以从系统登录到 Tomcat 浏览器并进行部署。然后点击新的 web 应用部署,如下图所示:
使用 ANT 脚本:您还可以使用 ANT 脚本部署应用程序。这些脚本包含源/目标和目标文件的信息。为了进行此部署,Tomcat 实例应该正在运行。
TCD (Tomcat Deployer):这是一个工具用于应用程序部署。应安装 ANT 以使 TCD 正常工作并且 Tomcat 实例应运行。 Tomcat实例无需安装TCD。
在 Tomcat 上部署和配置后可能会出现多个问题。让我们讨论不同的问题:
问题:用户抱怨部署后仍然可以查看旧代码。
故障排除步骤:
检查文档库中是否存在最新文件。
查看Tomcat 7的
logs
目录下的catalina.out
,是否部署了WAR文件名。如果都勾选了,问题依旧,则停止Tomcat服务并清除
work/Catalina/localhost下
使用以下命令:temp
目录的内容
重新启动 Tomcat 服务并要求用户测试应用程序。
问题: 用户抱怨在一个节点上可以查看当前部署的代码,而另一个节点仍然显示之前版本的代码。
故障排除步骤:
检查文档库中是否存在最新文件。
查看Tomcat 7的
logs
目录下的catalina.out
,是否部署了WAR文件名。如果两者都被检查并且问题仍然存在,则停止 node2 上的 Tomcat 服务。从node1复制代码,使用以下命令清除
work/Catalina/localhost
下temp
目录的内容:
重新启动 Tomcat 服务并要求用户测试应用程序。此外,检查 node1 和 node2 上的数据库状态,如果它们正在复制中。
从两个节点连接数据库。
场景 3:
问题: 对 server.xml
进行更改后,Tomcat 实例没有出现。
故障排除步骤:
转到 Tomcat
bin
目录。然后,运行
configtest.sh
。它将为您提供以下输出: