【问题标题】:Why present view with servlet if we can do it with jsp?如果我们可以使用 jsp 来呈现视图,为什么还要使用 servlet 呈现视图?
【发布时间】:2013-08-05 05:28:30
【问题描述】:

似乎两者都可以代表一个视图,即如果您请求servlet,它将显示一个html页面,如果您请求jsp文件,则相同,只是它们的实现方式不同.

现在我知道servlet 不止于此。他们控制请求等等,但是看了这么多天,仍然不知道如何将它们和谐地使用在一起。

如果我需要一些逻辑,我应该把它放在servlet 中,然后呢?如何从位于同一文件夹中的 servletjsp 文件中显示我的数据?

换句话说,当我使用servlet 时,我什至需要jsp 文件,如果是,为什么?

【问题讨论】:

  • 尝试在Servlets中写一些HTML页面,你会有一个想法。当然,您不想在 out.println 语句中连接那些 HTML,这太难了,而且不可读。
  • @Rohit Jain 所以你也可以在jsp 文件中编写程序的逻辑,如果你想与EJB 进行通信呢?
  • 我没有说,我会在我的 JSP 中编写业务逻辑。 Servlet 的工作是控制器。在 Servlets 中编写 View 代码非常复杂,而且不符合 MVC 模式。
  • 但它们似乎是相互竞争的技术,它们似乎没有协同工作?例如在 servlet 中编写业务逻辑,在 jsp 中编写视图?
  • 我建议你去看看一些好的MVC教程,或者一本好书。您将了解 Servlet 和 JSP 如何交互。

标签: html jsp jakarta-ee model-view-controller servlets


【解决方案1】:

好像两者都可以代表一个视图,...

之所以引入 JSP,是因为调用 Java 来渲染静态 HTML 模板中的动态部分要比尝试通过 servlet 用 Ja​​va 打印出整个页面要容易得多(println(),转义引号等。这是一团糟)。所以,JSP 更适合渲染视图。

MVC 完全是关于关注点分离:请求处理和路由、业务逻辑和应用程序数据,以及具有所有表示逻辑的视图

后来用 EL (表达式语言)JSTL (Java 标准标签库) 和其他增强了 JSP此类封装表示逻辑的标签库更适合支持View层。

模型 代表您的应用程序数据以及您对其应用的所有业务规则。它们被实现为 POJOs(普通的旧 Java 对象,即不扩展或实现特定于平台的类或接口)。

Servlet 和 Filters 具有它们的请求分派功能并且固有地存在于 Java 环境中,更适合作为 控制器 与应用程序服务器、模型和视图进行交互。它们促进了三层之间的所有路由和数据流。

如果我需要一些逻辑,我应该把它放在一个 servlet 中,然后呢?

您的业务逻辑既不属于 Servlet,也不属于 JSP。这涉及到您的业务类(POJO) 尽可能地与应用程序平台的类型(这里是 J2EE)隔离。

演示其使用的一个简单请求是要求您将应用程序移植到 .Net。啊哈!突然之间,在您的 Servlet/JSP 中编写所有现在无法轻松重用的业务逻辑并不是一个好主意。

因此,理想情况下,您的 servlet 会拦截客户端请求并调用一些业务类来实现它。这可能会返回一些包装为 域数据 对象(也称为 数据值数据传输对象)。

如何显示来自 servlet 或位于同一文件夹中的 jsp 文件的数据?

在重定向到适当的视图之前,Controller servlet 会将域对象推送到某个范围(可以是 requestsessionapplication,具体取决于要求)或可用于 MVC 框架的复杂数据存储(如 ValueStack 在 Struts 2) 中。

View,即您的 JSP,然后将从这些范围之一或 ValueStack 域对象并呈现其所需的属性用于通过带有 JSTL 标签的 EL 或带有 MVC 框架提供的标签库的 OGNL 表达式显示。

【讨论】:

    【解决方案2】:

    将逻辑与表示分开是一种很好的风格。 (1) 您可以轻松更改不触及演示文稿的逻辑,反之亦然。 (2) 您可以为每项任务使用正确的工具。 servlet 代码中的纯 Java 有利于实现逻辑。包括 JSP 在内的模板引擎非常适合演示,其中您的工作主要是在 HTML 中,有些地方您从应用程序中插入数据。

    您可以阅读 Spring 作为示例,了解如何以最佳方式使用 JSP。

    【讨论】:

    • 从阅读看来,两者都做同样的事情,但方式不同。它们是否也可以一起工作,例如使用servelt,仅用于java代码,并使用jsp,将逻辑呈现给用户?
    • 是的,当然。如果需要,可以从 servlet 调用 JSP 引擎。
    • @lamed ,当您将逻辑与表示分离时,称为“制作模板”。当您将业务逻辑与表示逻辑分开时,可以称为“制作视图”。 MVC 中的视图不是模板
    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多