在上篇文章中简单的描述了struts的应用,但是其存在一个小小的问题,就是每一个请求,都会有一个与之对应的Action。比如说查询用户,就会有一个查询用户的Action;以此类推,增加也会有一个,这样就会使得Action类越来越多,不利于维护。为此出现了另外一种形式,将每一个模块的需求(不如用户的增删改查)封装到一个Action里面,而那些需求则变成这个Action的方法。访问的时候只需要传递一个参数来区分要访问的是哪个方法就可以了。具体如下:
1、UserAction对象:
<span style="font-size:18px;">/**
* UserAction继承DispatchAction;而DispatchAction则继承Action
*/
public class UserAction extends DispatchAction {
/**
* 缺省方法,当访问时不加参数,则会访问此方法
*/
@Override
protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//调用业务逻辑操作
List userList = UserManager.getInstance().findAllUserList();
request.setAttribute("userlist", userList);
return mapping.findForward("list_success");
}
/**
* 查询所有用户
* 其中的参数和execute方法中的参数一样
*/
public ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//调用业务逻辑操作
List userList = UserManager.getInstance().findAllUserList();
request.setAttribute("userlist", userList);
return mapping.findForward("list_success");
}
/**
* 添加用户
*/
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获取从页面表单中提交过来的值
UserActionForm uaf = (UserActionForm)form;
User user = new User();
//将ActionForm中的值传递到User实体中
BeanUtils.copyProperties(user, uaf);
user.setCreateDate(new Date());
//调用业务逻辑操作
UserManager.getInstance().addUser(user);
return mapping.findForward("success");
}
......
}</span>
2、
struts-config.xml文件配置:
<struts-config>
<form-beans>
<form-bean name="userActionForm" type="com.bjpowernode.drp.web.forms.UserActionForm" />
</form-beans>
<action-mappings>
<action path="/user/list"
type="com.bjpowernode.drp.web.actions.UserAction"
scope="request"
name="userActionForm"
parameter="command">
<forward name="list_success" path="/user/user_list.jsp" />
<forward name="success" path="/user/list.do" />
<!-- ...... -->
</action>
</action-mappings>
</struts-config>
注意:在上面的访问中一定不要忘记了配置参数 parameter。(其余的配置参见上篇博客struts应用)
3、客户端访问:
4、总结:通过上面的方法,很大程度上减少了Action的数量, 并且把相关的业务方法集合在一起使得维护起来更容易。<a href="user/list.do?command=list" title="请点击访问用户管理系统">用户管理</a><br><br><a href="user/list.do" title="请点击访问用户管理系统">用户管理</a><br>