40

我有一个应用程序将客户发送到另一个站点来处理付款。客户之外的另一个站点调用我们服务器上的一个页面,让我们知道付款的状态。被调用的页面检查支付应用程序提供的参数,并检查我们是否知道该交易。然后它更新数据库以反映状态。这一切都是在没有与客户进行任何互动的情况下完成的。

我个人选择将这个功能作为 JSP 来实现,因为将文件拖放到文件系统中比编译和打包文件然后在配置文件中添加条目更容易。

考虑到页面的功能,我认为 servlet 将是首选选项。问题是:

  • 我的假设正确吗?
  • 是否有真正的理由在 JSP 上使用 servlet?
  • 这些原因是什么?
  • 4

    13 回答 13

    31

    JSP 在第一次运行时被编译为 servlet。这意味着它们之间没有真正的运行时差异。

    然而,大多数人都有将 servlet 用于控制器和将 JSP 用于视图的传统。由于控制器只是 java 类,您可以从所有 IDE 获得完整的工具支持(代码完成等)。与 JSP 相比,这提供了更好的质量和更快的开发时间。一些更高级的 IDE(突然想到 IntelliJ IDEA)具有出色的 JSP 支持,从而使该论点过时。

    如果您正在制作自己的框架或只是使用简单的 JSP 来制作,那么您应该可以继续使用 JSP。没有性能差异,如果您觉得 JSP 更容易编写,那么请继续。

    于 2008-09-19T13:26:56.317 回答
    27

    JSP:向用户展示数据。这里不应该有任何业务逻辑,当然也不能访问数据库。

    Servlet:处理来自表单或特定 URL 的输入。通常人们会在 Servlet 之上使用像 Struts/Spring 这样的库来清理编程。无论如何,servlet 应该只验证传入的数据,然后将其传递给后端业务层实现(您可以针对它编写测试用例)。然后它应该将结果值放在请求或会话上,并调用 JSP 来显示它们。

    模型:保存网站处理的结构化数据的数据模型。servlet 可以获取参数,将它们放入模型中,然后调用业务层。然后,该模型可以与后端 DAO(或 Hibernate)交互以访问数据库。

    任何重要的项目都应该实现 MVC 结构。当然,对于琐碎的功能来说,它是矫枉过正的。在您的情况下,我将实现一个调用 DAO 的 servlet 来更新状态等,或者任何需要的东西。

    于 2008-09-19T12:58:42.487 回答
    9

    JSP 应该用在表示层、业务逻辑的 servlet 和后端(通常是数据库层)代码中。

    我不知道为什么你不能使用你所描述的 JSP(无论如何它都会被容器编译成一个 servlet),但你是对的,首选的方法是首先使它成为一个 servlet .

    于 2008-09-19T12:51:07.277 回答
    6

    有两个非常简单的规则:

    1. 每当您想编写 Java 代码(业务逻辑)时,请在 Java 类(即 Servlet)中进行。
    2. 每当您想编写 HTML/CSS/JS 代码(视图/模板逻辑)时,请在 JSP 中进行。

    相关问题:

    于 2010-08-03T13:43:33.840 回答
    4

    JSP 是编写 servlet 的捷径。事实上,它们在编译之前被翻译成 servlet java 代码。(你可以在一些我不记得名字的tomcat子目录下检查它)。

    要在 servlet 和 JSP 之间进行选择,我使用一个简单的规则:如果页面包含的 html 代码多于 java 代码,则选择 JSP,否则只需编写一个 servlet。一般来说,这大致翻译为:使用 JSP 进行内容表示,使用 servlet 进行控制、验证等。

    此外,它更容易在 servlet 中组织和构造代码,因为它使用普通的 java 类语法。JSP 往往更加单一,尽管它可以在内部创建方法。

    于 2008-09-19T13:10:44.127 回答
    3

    JSP 本质上是由 servlet 容器自动编译为 servlet 的标记,因此编译步骤将在两个实例中发生。这就是为什么支持 JSP 的 servlet 容器必须有完整的 JDK 而不是只需要 JRE。

    因此,JSP 的主要原因是减少渲染页面所需的代码量。如果您不必呈现页面,则 servlet 会更好。

    于 2008-09-19T12:52:49.550 回答
    3

    我知道这不是今天流行的答案,但是:当我从头开始设计应用程序时,我总是使用 JSP。当逻辑很重要时,我创建普通的 Java 类来完成我从 JSP 调用的繁重工作。我从来不理解应该使用 servlet 的论点,因为作为纯 Java 类,它们更易于维护。JSP 可以轻松调用纯Java 类,当然普通Java 类与任何servlet 一样可维护。在 JSP 中格式化页面更容易,因为您可以将所有标记内联,而不必编写一堆 println。但是 JSP 的最大优点是您可以将它们放在一个目录中,并且可以直接访问它们:您不需要在 URL 和类文件之间设置关系。

    我可以看到使用 servlet 的唯一原因是如果您需要在 URL 和生成的执行类之间进行复杂的映射。就像,如果您想检查 URL,然后根据会话状态或类似情况调用许多类之一。就我个人而言,我从来没有想过这样做,而且我见过的应用程序往往很难维护,因为在你开始进行更改之前,你必须弄清楚真正正在执行的代码。

    于 2010-03-19T06:03:59.603 回答
    1

    如今,大多数 Java 应用程序都是基于 MVC 模式构建的......在控制器端(servlet)中,您实现业务逻辑。servlet 控制器通常将请求转发到将生成实际 html 响应(MVC 中的视图)的 jsp。目标是分离关注点……关于这个主题已经写了数千本书。

    于 2008-09-19T12:54:10.780 回答
    1

    在 MVC 架构中,servlet 用作控制器,而 JSP 用作视图。但两者在技术上是相同的。JSP 将在编译时(如在 JDeveloper 中)或在第一次访问时(如在 Tomcat 中)被翻译成 servlet。所以真正的区别在于易用性。我很确定您将很难使用 servlet 呈现 HTML 页面。但与常识相反,您实际上会发现在 JSP 中编写甚至相当复杂的逻辑非常容易(可能借助一些准备好的帮助类)。PHP 的人一直都在这样做。因此他们陷入了创建意大利面条代码的陷阱。所以我对您的问题的解决方案:如果您发现在 JSP 中编写代码更容易并且不会涉及太多代码,请随意在 JSP 中编写代码。否则,使用 servlet。

    于 2008-09-19T13:36:59.010 回答
    1

    同意以上关于 JSP 和 Servlet 之间差异的所有观点,但这里有一些额外的考虑。你写:

    我有一个应用程序将客户发送到另一个站点来处理付款。客户之外的另一个站点调用我们服务器上的一个页面,让我们知道付款的状态。被调用的页面检查支付应用程序提供的参数,并检查我们是否知道该交易。然后它更新数据库以反映状态。这一切都是在没有与客户进行任何互动的情况下完成的。

    您的应用程序正在使用另一个应用程序的支付服务。您的解决方案很脆弱,因为如果其他应用程序中的支付服务发生更改,则会破坏您的 JSP 页面。或者,如果您想更改应用程序的付款政策,那么您的页面将不得不更改。简短的回答是您的应用程序应该通过 Web 服务使用应用程序的支付服务。servlet 和 JSP 页面都不适合放置您的消费逻辑。

    其次,按照这些思路,过去几年中 servlet/JSP 页面的大多数使用都放在了 Spring 或 Struts 等框架的上下文中。我会推荐 Spring,因为它为您提供了从服务器页面到 Web 服务网关逻辑再到 DAO 所需的完整堆栈。如果您想了解 Spring 的具体细节,我会推荐Spring in Action。如果您需要更好地了解如何对用 Java(或 C#)等语言编写的企业架构进行分层,我会推荐 Fowler 的企业应用程序架构模式

    于 2008-09-19T15:52:55.343 回答
    0

    是的,这应该是一个servlet。JSP 可能更容易开发,但 servlet 更容易维护。试想一下,必须在 6 个月内修复一些随机错误并尝试记住它是如何工作的。

    于 2008-09-19T12:51:49.897 回答
    0

    在 java servlet 中,HTML 标记嵌入在 java 编码中。在 JSP 中,Java 编码嵌入在 HTML 标记中。

    对于大问题的大型应用程序,由于在java编码中嵌入更多html标签的不可读性,servlet的阅读、理解、调试等很复杂。所以我们使用jsp。在jsp中很容易理解、调试等。

    谢谢和问候, Sivakumar.j

    于 2010-12-13T11:10:51.730 回答
    0

    我认为这取决于你?因为 JSP 是 HTML 中的 Java,而 Servlet 是可以在 HTML 中执行的 Java

    嗯... servlet 比 jsp 更安全,因为如果您提交到 Servlet 并转发到另一个 JSP,则不会出现文件扩展名,而且您也看不到它是什么 Page。

    但是 JSP 的优点是您可以轻松地在那里编写代码。

    于 2014-06-24T09:16:49.217 回答