DispatchAction和MappingDispatchAction的用法及区别
DispatchAction使用:
??? 页面有以下四个请求:
????????? <html:link action="/user.do?method=add">添加新用户</html:link><br>
????????? <html:link action="/user.do?method=delete">删除用户</html:link><br>
????????? <html:link action="/user.do?method=update">修改用户</html:link><br>
????????? <html:link action="/user.do?method=query">查询用户</html:link><br>
??? struts-config.xml相应的配置:
????????? <action path="/user"
???type="cn.itcast.action.UserAction"
???parameter="method">
??? </action>
??? UserAction中的代码:
????????? private ActionForward query(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response) {
??
????? }
???????? private ActionForward update(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response) {
??????? }
??????? private ActionForward delete(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response) {
?
??????? }
??????? private ActionForward add(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response) {
??????? }
?从上面可知,四个请求交给同一个Action处理(默认应该调用Action的execute方法),但通过在请求url中加入一个属性(method)
?该属性名与struts-config.xml中相应Action 的parameter属性值一样? 该属性值与对应Action类中某个方法名一样即将该请求交给该方法处理
?DispatchAction 的优点:
?????????? 实行了在同一个 Action 类中完成一组相关的业务操作,以达到减少重复编程,使程序更加便于维护。
?DispatchAction 的缺点: 因为多个请求共用一个 action 节点, 所以多个请求使用一个 name 属性, 即多个请求使用一个 ActionForm,
??????? 进而使用同样的验证规则, 这在很多时候是不适用的.
???????
?MappingDispatchAction使用:
???? 页面有以下四个请求:
??????? <html:link action="/add">添加新用户</html:link><br>
??????? <html:link action="/delete">删除用户</html:link><br>
??????? <html:link action="/update">修改用户</html:link><br>
??????? <html:link action="/query">查询用户</html:link><br>
?? struts-config.xml相应的配置:
??<action path="/add"
???type="cn.itcast.action.UserAction"
???parameter="add"></action>
???
??<action path="/delete"
???type="cn.itcast.action.UserAction"
???parameter="delete"></action>
???
??<action path="/update"
???type="cn.itcast.action.UserAction"
???parameter="update"></action>
???
??<action path="/query"
???type="cn.itcast.action.UserAction"
???parameter="query"></action>??
?UserAction中的代码:
???????? 与上面DispatchAction的UserAction代码一样
? 从上面可知,它是在 struts-config.xml中action中指定parameter属性,通过该属性值去找相应的处理方法。但它可以共用一个ActionForm,也可不共用。
? 这样就解决了DispatchAction 的缺点,但却增加了struts-config.xml中的代码量。
?
? 所以应根据具体情况选择使用哪个