【问题标题】:Confusion in Struts 2 MVC architectureStruts 2 MVC 架构中的混乱
【发布时间】:2014-11-26 12:18:20
【问题描述】:
我正在研究Struts2 in Action,了解到Struts 2中的Controller是FilterDispatcher,而Model是Action。
但是之前我知道Action和FilterDispatcher都是Controller,Struts不提供对Model层的支持。以上哪一项是错误的?
【问题讨论】:
标签:
java
model-view-controller
architecture
struts2
struts
【解决方案2】:
实际上 Struts2 Actions 是 控制器委托。并且 Struts2 在 View 层上提供了一个 valueStack,在它上面有一个 Action,如果你想使用一个 pseudo-model 那么 action 应该实现 ModelDriven 接口。
您还应该注意,Struts2 操作是由 Struts2 容器管理的简单 POJO。这在 MVC 的观点上有点不同,也称为 MVC Model2。比如wikipedia给出的model的描述:
MVC 的中心组件,模型,根据其problem domain 捕获应用程序的行为,独立于用户界面。[5] model直接管理应用程序的数据、逻辑和规则。
从这个角度来看,业务模型与视图模型是分开定义的,并且通常由持久层管理。 Struts2 控制器通过其委托与视图模型一起工作。
视图可以是信息的任何输出表示,例如图表或图表;相同信息的多个视图是可能的,例如用于管理的条形图和用于会计师的表格视图。
在 Struts2 中,视图是控制器在 response 对象中返回的 Result。 Struts2 可以使用不同的结果类型和模板来产生响应。
控制器,接受输入并将其转换为模型或视图的命令[6]。
Struts2 使用request 作为输入,由Action 处理以找到合适的委托,该委托可以直接使用视图模型或使用服务层。
在 Struts2 中,Action 是一个控制器,它是一个简单的 POJO,也是一个模型。
Struts2 可以通过ActionSupport 帮助您使用控制器并呈现一个视图,它还将Action 推送到valueStack 以从视图访问。您可以通过将您的业务模型与视图模型相关联来设计模型。