似乎两者都可以代表一种观点,...
引入 JSP 是因为调用 Java 来呈现在其他静态 HTML 模板中动态的部分要容易得多,而不是尝试通过 servlet 打印出 Java 中的整个页面(太多println(),转义引号等。这是一团糟) . 因此,JSP 更适合呈现视图。
MVC完全是关于关注点分离:请求处理和路由、业务逻辑和应用程序数据,以及具有所有表示逻辑的视图。
后来用EL (表达式语言)、JSTL (Java 标准标记库)和其他封装表示逻辑的标记库增强的 JSP 更适合支持视图层。
模型代表您的应用程序数据以及您对其应用的所有业务规则。它们被实现为POJO(普通的旧 Java 对象,即不扩展或实现特定于平台的类或接口)。
Servlet 和 Filters 具有它们的请求分派功能并且固有地存在于 Java 环境中,更适合作为控制器与应用程序服务器、模型和视图进行交互。它们促进了三层之间的所有路由和数据流。
如果我需要一些逻辑,我应该把它放在一个 servlet 中,然后呢?
您的业务逻辑既不在 Servlet 也不在 JSP 中。这涉及到您的业务类(POJO),它尽可能地与应用程序平台的类型(这里是J2EE )隔离开来。
演示其使用的一个简单请求是要求您将应用程序移植到.Net中。啊哈!突然之间,在 Servlet/JSP 中编写所有现在无法轻松重用的业务逻辑并不是一个好主意。
因此,理想情况下,您的 servlet 将拦截客户端请求并调用一些业务类来完成它。这可能会返回一些包装为域数据对象(也称为数据值或数据传输对象)的数据(如 SQL 查询的结果)。
如何呈现来自 servlet 或位于同一文件夹中的 jsp 文件的数据?
在重定向到适当的View之前,Controller servlet 会将域对象推送到某个范围(可能是request、session或application ,具体取决于要求)或 MVC 框架可用的复杂数据存储(如 Struts 2 中的ValueStack)。
View是您的 JSP,然后将从这些范围之一或ValueStack中提取域对象,并通过带有 JSTL 标记的 EL 或带有 MVC 框架提供的标记库的 OGNL 表达式呈现其所需的属性。