【问题标题】:Java CGI vs. Servlets [closed]Java CGI 与 Servlet [关闭]
【发布时间】:2011-12-06 14:25:50
【问题描述】:

CGI 和 Java servlet 的主要区别是什么?

【问题讨论】:

    标签: java servlets cgi


    【解决方案1】:

    Servlet 在一个进程中运行(具有附加功能的 HTTP 服务器,称为 Servlet 容器),只要该进程存在,它们就存在。

    CGI 意味着每次有客户端请求时,HTTP 服务器都会创建新的进程实例来服务该请求。这是性能杀手。此外,由于每个请求都有一个新进程,这意味着 CGI 不能像 Servlet 那样在内存中聚合来自多个请求的数据,并且必须求助于外部持久存储(文件或数据库)。这也是性能杀手。

    【讨论】:

    • 据我了解,如果我将数据存储在会话变量中,则可以通过多个请求进行聚合。它与 Servlet 处理此问题的方式有何不同?
    • @NurShomik 'data variables'' 这里是指服务器上的变量,而不是客户端上的变量。由于每个请求都会产生新的服务器端进程,因此它无法轻松访问服务器端会话变量或来自先前请求的任何其他数据,除非通过一些持久性存储或 IPC 访问某个长时间运行的进程。这对性能也不利。
    • 此外,PHP 等 CGI 脚本将会话数据存储在文件中 - 因此使用外部持久存储。
    【解决方案2】:

    最大的不同是 CGI 在十多年前就死了。

    Servlet 是一种标准,Java CGI 从未真正成为。

    【讨论】:

      【解决方案3】:

      Java servlet 在需要运行以服务请求的某种容器(Tomcat、JBoss、Glassfish、Jetty 等)中运行。

      CGI 通常会为每个请求生成一个新进程(考虑到启动 JVM 有点昂贵),这不是 Java 的最佳解决方案。

      【讨论】:

        【解决方案4】:

        至少,在 servlet 容器中使用 Java servlet 应该会提供更好的性能。在 Java 中使用任何类型的 CGI 很可能必须为每个请求生成新的 Java 进程,这并不理想。在通过 Web 在服务器端使用 Java 时,使用 Servlets 确实是最好的方法。

        【讨论】:

          猜你喜欢
          • 2012-07-21
          • 1970-01-01
          • 2011-01-29
          • 2013-10-18
          • 2015-01-17
          • 2012-06-02
          • 2014-01-11
          • 2010-11-21
          • 2010-11-30
          相关资源
          最近更新 更多