最普遍存在的 Java 平台服务器应用程序之一是 Apache Tomcat.Tomcat 是基于最初由 Sun 捐赠的来源码的开放来源码项目。它是一个 HTTP 服务器,是 Sun 透过 Java Community Process 开发的、对广泛使用的 servlet 和 JavaServer Page(JSP)技术的正式参考实作。我将在本文中使用 Tomcat 作为样本 Java 应用程序,将其部署成 Linux 上的一个服务。如果您想要尝试自己执行 Tomcat,那么您将需要在系统上安装 Java 开发工具箱(Java Development Kit,JDK),而不是安装更小的 Java 执行时环境(Java Runtime Environment,JRE)。
servlet 和 JSP 技术用于建构 HTTP 服务器应用程序。虽然 servlet 技术中加入了许多特性(包括存取安全性、Session管理和执行绪控制),但它本身祇是粗略地等价于为快速直接的 Java 语言呼叫而定制的 CGI 接口。JSP 技术提供了一种处理动态生成的 HTML 页面的简便方法,这些 HTML 页面被直接编译成 servlet 以用于快速执行时作业。
在这两种技术之外,Tomcat 还提供了其它许多特性。凭它本身的效能,它实际上是全功能 Web 服务器,但它通常在 Linux 系统上与 Apache Web 服务器前端共同使用。Apache 向 Tomcat 提供了许多进阶效能以适合静态内容。对于静态内容所占比例比较高且使用率很高的 Web 应用程序,Apache 前端非常有用。但对于许多简单的 Web 应用程序,就没必要使用它了,当更易于组态和管理时,单独执行 Tomcat 就可提供足够的效能(至少对于以前没有使用过 Apache 的工作人员来说是这样)。
连接埠难题
单独执行 Tomcat 的一个大问题是它无法存取标准 HTTP 连接埠 80,除非是作为 root 使用者执行。作为 root 使用者执行服务器应用程序的想法通常并不是上串流公司所讨论的问题,因此我将完全放弃这个想法﹗使用除 80 以外的连接埠是一个更好的选择(例如,Tomcat 缺省连接埠 8080)。这通常适用于测试,但当使用者正在存取服务时,它会导致杂乱的 URL,因为需要在请求中清楚地说明连接埠号。使用非标准连接埠还意味着如果需要外部存取,就需要重新组态所有的防火墙。
xinetd 解决方案
幸好,Linux 支持一些利用 Tomcat(或任何其它使用者方式应用程序)处理连接端口 80 请求的简便方式。一种常用方式是透过 xinetd.xinetd 是带有广泛存取控制和日志记录支持的因特网服务守护程序,它还拥有方便的重新导向特性。重新导向让您将系统组态成接受一个连接埠上的进入请求,然后将请求传递到另一个连接埠或者甚至另一个 IP 地址进行处理。
如果您想要在系统上设定 Tomcat 以处理连接埠 80 请求,就需要加入 xinetd 组态文件来实作这一目的。假设按一般在正常路径上安装了 xinetd,那么您可以透过对 /etc/xinetd.d 目录加入一个文件(以 root 使用者身份)来执行这一作业。清单 1 提供了用于 Tomcat 的一个样本组态文件。
清单 1. xinetd 重新导向组态
|
在加入了组态文件之后,需要重新启动 xinetd 来真正活化重新导向。在大多数 Linux 安装上,透过以 root 使用者身份执行以下指令来重新启动 xinetd︰
/sbin/service xinetd restart
祇要将组态文件放在 /etc/xinetd.d 目录中,当重新启动系统时,重新导向就会自动启动。如果没有将 Tomcat 设定成自动启动,那么在启动 Tomcat 之前,会拒绝进入请求。