似乎两者都可以代表一个视图,也就是说,如果你请求一个servlet
,它会显示一个html页面,所以如果你请求一个jsp
文件也一样,就像它们一样实施的是不同的。
现在我知道servlet
不止于此。他们控制请求等等,但是在阅读了这么多天之后,仍然不知道如何将它们和谐地结合在一起。
如果我需要一些逻辑,我会把它放在servlet
中,然后是什么?如何从servlet
或位于同一文件夹中的jsp
文件中显示我的数据?
换句话说,当我使用jsp
时,我甚至需要servlet
个文件,如果是,为什么?
答案 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的示例。