第一个办法是让 CGI 程序与永久性程序进行对话,这个方法可以有许多变种。CGI 程序可以启动一个要基于某个 ID 来进行访问的应用程序,而这个 ID 是我们在响应中返回的(如图 1 中的 app-srv 所示)。假如此 ID 在某个间隔内还没有被重新使用,程序将终止。另一种方式是让一个永久性程序来处理所有客户机向该应用程序发送的请求。该场景极可能需要一个多线程程序,用于验证客户机的有效性,以及向每个新的客户机分配 ID。然后,它必须记录每个客户机 ID 的超时时间。
第二个办法是通过包含 API 来扩展 Web 服务器的功能,即利用 Web 服务器 API(图 1 中的 NSAPI)来编写应用程序,并将之驻留在 Web 服务器上。通过该方法,Web 服务器可以保持数据库连接,以及包含应用程序特定的处理信息。这种方法也需要记录用户和连接超时。
进入应用程序服务器将各种 Web 应用程序的实现方式合并成为一个更完整的架构是有道理的。那时,Java 倡导的“一次编写,到处运行”的概念已经十分流行。所以,J2EE 的成型并未花很长时间。