正在用Struts开发一个项目,由于是第一次使用Struts,现在遇到了这样的问题:(一):整个项目大概有十个模型,每个模型都有相同的操作:增,删,改,目前在写第一个模型的时候为这些操作分别定义了一个Action,发现如果剩下的模型像这样写下去的话,这样会使整个应用的Action变得很多啊~~~~
(二):
还是对应每个模型写一个Action类,
如果是这种写法的话:
1。用普通的Action,每个操作都调用这个Action但是在配置文件里有的参数带上ADD,DELET等来标志是哪种操作,然后在Action里调用mapping的获得参数的方法,看是哪种操作转去执行那个方法~~
2。好像Struts自带了一个类DispatchAction这个类跟用上面第1种写法有什么区别呢~~~是用这个呢还是用第1种的呢~~
(一)和(二)的作法有什么性能上和系统开销上的分别呢~~~
(二):
还是对应每个模型写一个Action类,
如果是这种写法的话:
1。用普通的Action,每个操作都调用这个Action但是在配置文件里有的参数带上ADD,DELET等来标志是哪种操作,然后在Action里调用mapping的获得参数的方法,看是哪种操作转去执行那个方法~~
2。好像Struts自带了一个类DispatchAction这个类跟用上面第1种写法有什么区别呢~~~是用这个呢还是用第1种的呢~~
(一)和(二)的作法有什么性能上和系统开销上的分别呢~~~
个人认为,不然ACTION会很多
每一个JSP页面就相当每一个模块功能,在这模块上会有若干个button,如:增加button,删除button,改button,在用户提交时,页面也提交一个标志loop给完成这个模块的Action,使它(Action)知道要增加,删除,还是修改,
然后,在Action里,就通过loop,判断你的操作是什么,然后就是调用你的JavaBean来完成操作.
这才是MVC.
比如说对于这个项目第一个模型就是资产管理人,是不是写一个
UserAction呢,
public class UserAction extends DispatchAction{
是不是在这里有个判断的标志 String loop="";
if(loop等于ADD){
您所谓的调用JavaBean是定义在这个模型Action里的对应操作方法 增,删,改吗? ActionForward
}
else if(...){
......
}
//当请求参数method的值为ADD时,调用下面的addFoward()方法处理请求
public ActionForward add(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response){
}
}
感觉用这个DispatchAction每次一个提示的时候:http://localhost/equipment/UserAction是不是得在它后面加参数啊http://localhost/equipment/UserAction?method=ADD....如果是这样的话还不如直接写:
public class UserAction extends Action{
是不是在这里有个判断的标志 String loop="";
if(loop等于ADD){
所谓的调用JavaBean是定义在这个模型Action里的对应操作方法 增,删,改吗? ActionForward
}
else if(...){
......
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
每个请求进来的时候都要经过execute方法然后在这里
ActionForward myforward = null;
String loop= mapping.getParameter();
接下来是一大串的if判断是等于加,还是删,改。。
if ("ADD".equalsIgnoreCase(loop)) {
myforward = performADD(mapping, form, request, response);
}
else if(。。){
。。
}
}
上面的两种方法用哪种比较好点呢
另外有个疑问是如果是不采用一个操作一个Action而用这种的话,像程序进到这独一的模型后不是得进行大量的逻辑判断,流程判断吗,这样系统性能会相对降低吗
另外请问各位前辈,同一个模块都用一个action,在对于不同的功能上,加参数来分别处理处理?
你们也是这么做的吗?
import java.io.PrintWriter;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.legenddg.dgquery.bean.DeptBean;import form.DeptForm;/**
* @version 1.0
* @author
*/
public class DeptAction extends Action{ public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
ActionErrors errors = new ActionErrors();
ActionForward forward = new ActionForward(); // return value
DeptForm deptForm = (DeptForm) form;
HttpSession session = request.getSession();
ServletContext servletContext = session.getServletContext();
String path = servletContext.getRealPath(request.getRequestURI());
path = path.substring(0,path.lastIndexOf("\\"));
path = path.substring(0,path.lastIndexOf("\\"));
DeptBean deptBean = new DeptBean();
forward = mapping.findForward("local");
int loop = deptForm.getLoop();
if(loop==1){
forward = mapping.findForward("local");
return (forward);
}
if(loop==2){
deptBean.printDeptScheduleExcel(form,session,path);
forward = mapping.findForward("local");
return (forward);
}
if(loop==3){
deptBean.printDeptSchedulePDF(form,session,path);
forward = mapping.findForward("local");
return (forward);
}
return (forward); }}