使用 Web 服务器的 Listener 架构建议书
简介
目标
本文的目标是分析和设计可处理多种协议的 Listener 组件的高级视图。文中提供了一种构建 listener 组件的初始方法,并对比了使用 Servlet 与使用独立 Java 应用程序构建 listener 的设计。
使用 Servlet 与使用独立 Java 程序的 Listener 应用程序的对比
来自 Customer 的请求可能使用多种协议,像 FTP、TCP/IP、HTTP、SNA、SOAP、HTTPS 和 MQ。Customer Handler 负责处理请求并将控制传送到 Controller 以便进一步处理。
Listener 构成了 Customer (FTP/API/Web Customer) 和 Front controller 之间的接口。
Listener 组件处理来自 Customer 的请求,控制则被传送到 Customer Handler 以便进一步处理。
选项
选项 A: 通用 Servlet 架构
可以配置 Listener 组件为特殊的协议工作。Configurator 接受配置文件并根据配置参数来配置 Listener 组件。
“Generic Servlet”具有多种抽象服务方法,可以实现它们以处理多种协议。要处理 FTP、TCP/IP、HTTP 等协议,我们可以实现可扩展 Generic Servlets 的 Servlets。FTP、TCP/IP、HTTP Servlets 可实现多种服务方法以接受来自客户的采用了不同协议的请求。
优势
· 无需单独的 GUI 来启动和停止 listener。可将 listeners作为一个 web 应用程序来部署,使其易于使用。通过 web 服务器管理控制台可以部署、撤销部署和重新部署 web 应用程序。
· 各个组件将作为 WAR(Web 档案文件)来创建和打包。这些 listeners 将在 web 容器内作为 web 应用程序来部署。
· 因为 Generic Servlet 能够处理多种协议,所以新的协议设计和实现将是基于标准的架构。
劣势
· 代码的实现要花费很多时间。
· 即使我们实现了使用 java 类和从 Servlet/JSP 调用 java 类,被调用的 java 程序也将无法参与到群集环境中,并且也无法将对象保留在会话中,这就意味着如果我们需要类似于HTTPServlet而设计,开发会变得更加复杂,并且为了使其能在群集环境中运行还需要大量的测试工作。
注意:任何 web 服务器都没有这样的实现。
选项 B: Servlet Init 架构
在 web 服务器启动和 web 服务器shutdown期间的关机时将调用所有的 Servlets。每种协议的实现逻辑将被写入 Servlet 的 init 方法中。
优势
· web 服务器启动期间会调用 init 方法,并且在 web 服务器shutdown时会触发 destroy方法。