At a high level, how does struts2 work? I'm co

2020-02-11 07:46发布

At a high level, how does struts2 work? I'm coming from a mvc background

Looking at a sample project, I see allot of these ___action type classes.

Is it just a action references to a controller action? i.e. a response to a particular url based on get/post?

2条回答
来,给爷笑一个
2楼-- · 2020-02-11 08:24

Typical Struts2 workflow (bear in mind that Struts2 is extremely configurable, its parts are well decoupled)

struts.xml => defines 'mappings' :

  • which action is executed for each URL
  • one or more results : which resource (typically a JSP) generates the view for each result returned by the action

Hence, for example, say a struts.xml contains

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

And your Java action is:

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

Then the request http://mysite.com/mywebapp/add.action?x=10&y=20 would make Struts2 to instantiate a SumAction object, set the x and y properties and call the execute method. If "success" is returned, then it will place the action in some "scope", forward to "/SumResult.jsp" in which typically one use some struts2 tag to show the result, pulling it from the action object.

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

Of course, in less trivial scenarios the execute() method would call the service layer.

So, it's not very clear if the action is controller or controller+model, I'd say the later, because it not only has the logic to process the request but also acts as a container of the data (input and result). But only during the scope of a request.

查看更多
Fickle 薄情
3楼-- · 2020-02-11 08:25

The way I always understood it is that actions are your controllers. You hit a url, you map it to an action, your action controls what business logic happens, like "load domain object" or "just go to jsp".

The jsps are your views. I think if you are building a RIA where actions are handling xhrs and returning json, The V component of MVC is outside the framework -- its your extjs or whatever you are using for presentation.

Struts has always seemed like really a VC framework, because you don't define your model with struts. You do that yourself. Although you use the model in struts, when you convert your model to whatever your presentation needs.

查看更多
登录 后发表回答