在普通的旧servlets
中,我可以使用doGet
和doPost
方法。在doGet
中,我将用户转发到某个页面,在doPost
中,我处理从我给出的页面输入的数据。所有这些都发生在一个servlet中。
但是Struts2使用的是Front Controller模式,而不是doGet/doPost
,我只有execute
方法。那么,我如何正确地给用户一些页面,这样他就可以在execute
中查看、输入数据、提交和应用程序?
据我所知,我有两个选择(例如在注册表上):
-
将页面映射到另一个url:
<action name="register_display"> <result name="success" type="dispatcher">register.jsp</result> </action> <action name="register" class="magazine.action.client.RegisterClientAction" method="execute"> <result name="success" type="redirectAction">/index</result> <result name="error" type="redirectAction">register_display </result> </action>
-
创建名为
display
的整个包,并在其中放置可以执行POST的所有视图:<package name="display" namespace="/display" extends="struts-default"> <action name="register"> <result name="success" type="dispatcher">register.jsp</result> </action> ... </package>
还有其他选择吗?哪个比较好?
在标准Struts2样式中,Action类只有一个工作方法,即execute
方法。但是,您不必遵循此步骤。您可以在单个Action类中定义多个操作。
例如,您向users
发出GET请求,该请求在UsersAction
的默认execute
方法中处理。
@Override
public String execute() {
// fetch the list of users
return SUCCESS;
}
假设您想在相同的操作中添加一个新用户,方法是将其发布到user_add
。所以你定义了一个add
方法:
public String add() {
// add the user
return SUCCESS;
}
struts.xml
看起来与此类似:
<package name="users" extends="defaultPackage">
<action name="users" class="com.example.UsersAction">
<result>users.jsp</result>
</action>
<action name="user_add" class="com.example.UsersAction" method="add">
<result type="redirect">users</result>
</action>
</package>
在您的场景中,您将呈现页面,用户应该在运行(可能是空的)execute
方法后看到该页面。然后,您将发出post请求,该请求将映射到Action类的另一个方法。