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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…