【问题标题】:Servlets, JSP, Java?小服务程序、JSP、Java?
【发布时间】:2010-08-01 20:47:47
【问题描述】:

我对某些术语感到很困惑,我知道 Java 可以编写一些“通常的可执行”程序。但是我发现你可以用java做servlet,然后听说了JSP。

我不确定 servlet 和 JSP 的区别。我不明白,我认为它就像 PHP 或类似的东西。

您对此有任何有组织的参考资料(或想解释一下“普通”Java 向这种技术的过渡)吗?

谢谢。

【问题讨论】:

标签: java jsp servlets


【解决方案1】:

Servlet 是 Java,嗯,是在 Web 应用程序的特殊环境中运行的程序。正如您所期望的那样,它们接收和处理 Web 请求。几乎是直接的 Java 代码加上一些约定。 Servlet 具有挖掘请求参数的方法,并且可以将打印机输出流连接到最终将返回给用户浏览器的输出流。

JSP 是 Java 服务器页面。那是 HTML 页面和一种预处理器。在通常的 HTML 标签中,预处理器评估一种模板/标签语言。本质上,您可以编写 HTML 页面,但包含 Java 代码。 “预处理器”将您的 JSP 转换为 servlet; HTML 标记及其内容成为 servlet 代码中的字符串。既然您提到了 PHP,是的,JSP 看起来大致类似于(一些)混入了 HTML 的 PHP 代码。

JSP 是一种创建带有活动Java 内容的Web 页面的非常简单的方法,与Microsoft 的ASP 大致相当。然而,大多数 Java 社区都同意 JSP 混合 HTML 标记和代码的方式是一种可恶的做法,它会导致应用程序非常不干净,并且也不允许 Web 设计人员和程序员之间进行专业化。这与“真正的”程序员喜欢抨击 PHP 的方式相同。

因此,JSP 大多已失宠,并已被用于混合 Web 内容和代码的其他解决方案所取代。行业中最引人注目/最成功的是同时的“行业标准”StrutsJava Server Faces。但是,很多人觉得这些也非常复杂,所以有很多不同的Web application frameworks for Java

我提到的任何关键字都会引导您访问其他信息链接。在Oracle's documentation on J2EE 中可以找到详尽完整的信息,但我不建议将其作为介绍阅读。它沉重得可怕,详细而深远。相反,请看一些现代的第 3 方,最好是开源框架,我认为这要少得多。我个人很喜欢Wicket,但它只是其中之一,而且我知道的替代方案太少,无法发布有效的推荐。

【讨论】:

    【解决方案2】:

    Servlet 是在 Tomcat、Jetty 等 servlet/JSP 应用程序引擎中运行的 HTTP 侦听器。

    JSP 是编译成 servlet 的模板。它们允许您以类似标签的模板表示法编写生成 HTML 的 servlet,从而实现动态行为。

    【讨论】:

      【解决方案3】:

      Servlet 和 JSP 与 PHP 一样,用于创建动态 HTML 页面,但使用的是 Java 语言。在 Java 世界中,首先我们有 Servlet。 Servlet 是实现某些接口的 Java 类。然后,例如,假设您希望您的 servlet 输出这样的 HTML 页面:

      <html>
      <head></head>
      <body>current time</body>
      </html>
      

      当前时间将在哪里动态生成并显示当前时间。为此,您必须编写多个out.println 语句:

      out.println("<html>");
      out.println("<head></head>");
      out.println("<body>" + new Date() + "</body>");
      out.println("</html>");
      

      如您所见,与 PHP 相比,这是非常冗长且不可维护的。这就是 JSP 诞生的原因。您可以使用以下代码在 JSP 中实现相同的功能:

      <html>
      <head></head>
      <body><%= new Date() %></body>
      </html>
      

      这更简洁,更易读,对 HTML 作者来说更熟悉。

      现在,为了服务 JSP 和 Servlet,就像在 Apache + Mod PHP 中运行 PHP 一样,您需要一种称为 Servlet 容器的特殊服务器。一个流行的开源 Servlet 容器是 Tomcat:tomcat.apache.org

      如果您有任何其他问题,请告诉我。

      【讨论】:

      • 谢谢。有用的解释:)
      【解决方案4】:

      简单来说,JSP 是一种通过在模板中嵌入 Java 来构建 servlet 的方法。

      【讨论】:

      • 这在技术上是正确的,但“最佳实践”是不要将 Java 嵌入到您的 JSP 中。事实上,如果您的 web 应用程序是使用 MVC 架构设计的,您可能应该使用 JSP 进行视图呈现。
      【解决方案5】:

      过去有 applet,它们是在客户端浏览器中运行的应用程序,而与之相反的是 servlet,它们是在基于 java 的 Web 服务器(容器)中运行的应用程序。

      servlet 可以访问信息以将信息传回给浏览器,并从 cookie 和标头等资源中获取信息。

      但是,很多人都熟悉 ASP 和 PHP,编写 servlet 可能更难,所以为了使框架能够抽象出来并使 Web 开发更容易,我们有 JSP(Java Server Pages)。这些将编译为 servlet,这只是创建网页的一种更简单的方法。

      这是一个简化的解释,所以我跳过了一些部分,例如讨论如何使用模板,但您可以通过查看 JSP 生命周期来更好地了解这里:http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPIntro4.html

      JSP 页面存在一些限制,有时会迫使您使用 servlet,例如 JSP 页面无法返回二进制数据,因此如果您想发回图像或 PDF,那么 servlet 是您唯一的选择。

      【讨论】:

        【解决方案6】:

        “servlet API”是一组 Java 接口(“契约”),它允许您编写小型 sn-ps 代码来处理来自浏览器的单个 Web 请求并生成对此的响应。这通常是一个网页,但也可能是一个生成的图像或声音文件。

        基本上,作为 servlet 程序员,您不必关心的不仅仅是“我应该生成什么作为对这个请求的响应”。周围的环境会处理所有其他事情,例如监听请求的端口、记录请求信息、保存活动会话以便用户不会注意到服务器已重新启动等。

        在这样的servlet中,响应是在代码中生成的,并且

        out.println("<li>" + name + ": " + address +"</li>");
        

        很快就会变得乏味。因此,JSP 被发明出来让你说

        <li><%= name %>: <%= address%></li>
        

        而不是在页面中主要是 HTML,但其中包含一些代码。

        经验表明,HTML 骨架和 Java 数据表示应该分开,因为 HTML 和 Java 混合在同一个文件中会使其难以维护。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-21
          • 2013-04-26
          • 2012-08-01
          • 2012-06-10
          • 2010-10-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多