这个问题在这里已经有答案了:

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

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

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

  • 我的推测正确吗?
  • 是否有真正的理由使用 servlet 而不是 JSP?
  • 这些原因是什么?
  • 有帮助吗?

    解决方案

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

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

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

    其他提示

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

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

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

    任何重要的项目都应该实现 MVC 结构。当然,对于琐碎的功能来说,这有点过分了。在你的例子中,我将实现一个调用 DAO 的 servlet 来更新状态等,或者任何需要的内容。

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

    我不知道为什么你不能像你描述的那样使用 JSP(无论如何它都会被容器编译为 servlet),但你是对的,首选方法是首先将其设为 servlet 。

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

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

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

    有两个非常简单的规则:

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

    相关问题:

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

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

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

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

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

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

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

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

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

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

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

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

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

    谢谢,问候,sivakumar.j

    我想这取决于你吗?因为JSP是HTML内部的Java,Servlet是可以在内部执行HTML的Java

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

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

    许可以下: CC-BY-SA归因
    不隶属于 StackOverflow
    scroll top