【发布时间】:2010-08-01 20:47:47
【问题描述】:
我对某些术语感到很困惑,我知道 Java 可以编写一些“通常的可执行”程序。但是我发现你可以用java做servlet,然后听说了JSP。
我不确定 servlet 和 JSP 的区别。我不明白,我认为它就像 PHP 或类似的东西。
您对此有任何有组织的参考资料(或想解释一下“普通”Java 向这种技术的过渡)吗?
谢谢。
【问题讨论】:
我对某些术语感到很困惑,我知道 Java 可以编写一些“通常的可执行”程序。但是我发现你可以用java做servlet,然后听说了JSP。
我不确定 servlet 和 JSP 的区别。我不明白,我认为它就像 PHP 或类似的东西。
您对此有任何有组织的参考资料(或想解释一下“普通”Java 向这种技术的过渡)吗?
谢谢。
【问题讨论】:
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 内容和代码的其他解决方案所取代。行业中最引人注目/最成功的是同时的“行业标准”Struts 和Java Server Faces。但是,很多人觉得这些也非常复杂,所以有很多不同的Web application frameworks for Java。
我提到的任何关键字都会引导您访问其他信息链接。在Oracle's documentation on J2EE 中可以找到详尽完整的信息,但我不建议将其作为介绍阅读。它沉重得可怕,详细而深远。相反,请看一些现代的第 3 方,最好是开源框架,我认为这要少得多。我个人很喜欢Wicket,但它只是其中之一,而且我知道的替代方案太少,无法发布有效的推荐。
【讨论】:
Servlet 是在 Tomcat、Jetty 等 servlet/JSP 应用程序引擎中运行的 HTTP 侦听器。
JSP 是编译成 servlet 的模板。它们允许您以类似标签的模板表示法编写生成 HTML 的 servlet,从而实现动态行为。
【讨论】:
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
如果您有任何其他问题,请告诉我。
【讨论】:
简单来说,JSP 是一种通过在模板中嵌入 Java 来构建 servlet 的方法。
【讨论】:
过去有 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 是您唯一的选择。
【讨论】:
“servlet API”是一组 Java 接口(“契约”),它允许您编写小型 sn-ps 代码来处理来自浏览器的单个 Web 请求并生成对此的响应。这通常是一个网页,但也可能是一个生成的图像或声音文件。
基本上,作为 servlet 程序员,您不必关心的不仅仅是“我应该生成什么作为对这个请求的响应”。周围的环境会处理所有其他事情,例如监听请求的端口、记录请求信息、保存活动会话以便用户不会注意到服务器已重新启动等。
在这样的servlet中,响应是在代码中生成的,并且
out.println("<li>" + name + ": " + address +"</li>");
很快就会变得乏味。因此,JSP 被发明出来让你说
<li><%= name %>: <%= address%></li>
而不是在页面中主要是 HTML,但其中包含一些代码。
经验表明,HTML 骨架和 Java 数据表示应该分开,因为 HTML 和 Java 混合在同一个文件中会使其难以维护。
【讨论】: