如果我们可以使用jsp,为什么要使用servlet显示视图?

时间:2013-08-04 11:23:20

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

似乎两者都可以代表一个视图,也就是说,如果你请求一个servlet,它会显示一个html页面,所以如果你请求一个jsp文件也一样,就像它们一样实施的是不同的。

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

如果我需要一些逻辑,我会把它放在servlet中,然后是什么?如何从servlet或位于同一文件夹中的jsp文件中显示我的数据?

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

2 个答案:

答案 0 :(得分:2)

  

似乎两者都可以代表一个观点,......

引入JSP是因为调用Java来渲染静态HTML模板中的动态部分要容易得多,而不是试图通过servlet在Java中打印整个页面(太多 println(),逃避报价等等。这是一团糟。因此,JSP更适合渲染视图。

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

JSP随后使用 EL (表达式语言) JSTL (Java标准标记Lbrary)等进行了增强封装表示逻辑的此类标记库更适合支持查看图层。

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

具有请求分派功能并且在Java环境中固有存在的Servlet和过滤器更适合作为控制器与Application Server,Model和View进行交互。它们促进了三层之间的所有路由和数据流。

  

如果我需要一些逻辑,我是将它放在servlet中,然后是什么?

您的业务逻辑既不属于Servlet,也不属于JSP。这将进入您的业务类(POJOs)尽可能地与应用程序平台的类型(这里是 J2EE )绝缘。

证明其使用的简单请求是要求您将应用程序移植到 .Net 。 A-HA!突然之间,在Servlet / JSP中编写所有业务逻辑,现在不能轻易重用,这并不是一个好主意。

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

  

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

在重定向到适当的 View 之前, Controller servlet会域对象推送到范围(可能是请求会话应用程序,具体取决于要求)或MVC框架可用的复杂数据存储(如 ValueStack 在Struts 2中。

View ,它是您的JSP,然后域对象来自其中一个范围或 ValueStack 并呈现其所需的属性通过带有JSTL标签的EL或带有MVC框架提供的标签库的OGNL表达式进行显示。

答案 1 :(得分:1)

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

您可以阅读有关如何以最佳方式使用JSP的示例。