我知道问题是关于可能通过不同方法解决问题,但让我详细说明我想问的问题以及我对此有多了解。
我们有两种mvc方法用于ATG(或许多其他框架)基于拉和推送。 据我所知,formhandlers和droplet都在不同需求中扮演控制器的一部分,存储库是我们的模型,jsps提供视图。 如果我是正确的,那么servlet链正在解决什么目的?它如何适应MVC的这张图片?
如果可能,请在流程图的帮助下解释从请求到响应(端到端)。
非常感谢专家。 请帮忙。我在任何地方找不到这种解释。
答案 0 :(得分:1)
ATG首先要记住的是它是一个旧平台。因此,当试图通过MVC镜头理解不同的机制时,请记住没有任何设计与MVC一起考虑 - 该平台早于广泛的知识和Web开发中对MVC模式的接受。
Droplet是一种从JSP(以及之前的JHTML)模板调用Java代码的通用机制。 J2EE-land中最接近的类似物是标签库。因此,您可以使用它们来完成许多不同的任务。您也可以将它们用作穷人的MVC控制器。这是通过编写专用于处理页面业务逻辑的自定义Droplet类,并将相关页面状态设置为请求参数来完成的。然后,您将调用Droplet作为JSP页面的第一步。这与J2EE模型2没有太大区别,奇怪的是,首先编译的JSP开始执行,然后调用你的"控制器"代码然后继续处理"视图。"
表格处理程序,如名称所示,旨在处理表单提交。这些由servlet管道(DAFDropletEventServlet)中的链接执行,在发布的页面开始呈现之前。表单处理程序的典型用法是它们将在执行后发送重定向,并取消页面的呈现,这将中止servlet管道的任何进一步处理。表格处理程序是最接近"控制器" ATG提供。但它们对于处理GET请求非常糟糕,并且在用于此目的时会导致一些非常不幸的URL。
为什么他们创造了两种不同的机制?为什么他们随后没有将更新的MVC模型作为平台的一部分引入?这些问题我无法回答。
答案 1 :(得分:0)
ATG,在页面呈现级别,不是MVC。不要将其视为MVC。 ATG的核心是基本Servlets API的扩展。
使用successUrl
和errorUrl
的表单和表单处理是一种MVC。 Droplet当然不是。
在ATG应用程序中,在页面呈现时(即Droplet)获取数据是完全可以接受的