从高层次来看,struts2如何运作?我来自mvc背景

时间:2010-07-16 16:01:02

标签: model-view-controller struts2

在较高的层面上,struts2如何运作?我来自mvc背景

查看示例项目,我看到了这些___action类型的分配。

它只是一个对控制器动作的动作引用吗?即基于get / post对特定网址的响应?

2 个答案:

答案 0 :(得分:4)

典型的Struts2工作流程(请记住,Struts2是非常可配置的,它的部分很好地解耦)

struts.xml =>定义'映射':

  • 为每个网址执行action
  • 一个或多个results:哪个资源(通常是JSP)为操作返回的每个结果生成视图

因此,例如,假设struts.xml包含

   <action name="add" class="example.SumAction">
     <result name="error">/Error.jsp</result>
     <result name="success">/SumResult.jsp</result>
   </action>

你的Java行动是:

   public class SumAction { 
       private int x;
       private int x;
       private int z;
       // getters and setters ommited
       public String execute() {
           z = x + y; 
           return "success";
       }
   }

然后请求http://mysite.com/mywebapp/add.action?x=10&y=20将使Struts2实例化SumAction对象,设置xy属性并调用execute方法。如果返回“success”,那么它会将动作放在某个“范围”中,转发到“/SumResult.jsp”,其中通常使用一些struts2标记来显示结果,从动作对象中拉出它。

 Result: <b><s:property value="z" /></b>

当然,在不太重要的情况下,execute()方法会调用服务层。

因此,不清楚动作是控制器还是控制器+模型,我会说后者,因为它不仅具有处理请求的逻辑,而且还充当数据的容器(输入和结果) )。但只是在请求范围内。

答案 1 :(得分:0)

我总是理解的是,行动就是你的控制者。你点击了一个url,你将它映射到一个动作,你的动作控制着什么业务逻辑发生,比如“加载域对象”或“只是转到jsp”。

jsps是你的观点。我认为如果你正在构建一个RIA,其中动作正在处理xhrs并返回json,MVC的V组件在框架之外 - 它是你的extjs或者你用于演示的任何东西。

Struts似乎总是真的是一个VC框架,因为你没有用struts定义你的模型。你自己这样做。虽然您在struts中使用该模型,但是当您将模型转换为您的演示文稿所需的任何内容时。