[color=blue]
1.简介:
没有struts之前,使用servlet,最常用的是 doGet,doPost,service方法,如果有些经验的程序员会合理的使用这三个方法:如在用户发出get的请求时,将用户请求在doGet方法中处理,用户发出post请求时,将用户的请求用doPost请求处理,必要时加上service方法去处理那些在一个servlet中必须执行的请求,用户的请求大体也就这三类,但是如果细分,一个“编辑”,“删除”,“查看”等操作都是doGet的范围,当然也可以都写到serice方法中或 doPost中处理,这样为了区分这些请求,我们通常都要在程序中加入一个判断的参数,如:operate,然后在程序中判断 if operate.equals("update")....,if operate.equals("del")....,if operate.equals("view")....等,实际上这只是个简单的逻辑,如果业务更加复杂,你可能写更多的类时operate的参数,这样就造成程序中有若干if..else if...else if ..,即便你有非常好的编码规范,整齐的缩进,这个程序也相当难维护;而用到struts时,你又可能把这些参数都写到execute方法中;那么最好的方法还是将这些逻辑分开处理,如果执行“编辑”操作的时候调用“编辑”对应的方法,执行“删除”的时候调用“删除”对应的方法...将是比较理想的结果,为了实现这个应用要求,struts引入许多类型的工具类,如:MappingDispathAction,LookDispachAction,DispatchAction,以满足不同要求的需要,这样你在struts-config.xml文件的action元素中增加 parameter属性即可实现这个功能。
[/color]
[color=red]
2.下面是Struts中的一些常用Action如DispatchAction/LookupDispatchAction/MappingDispatchAction/ForwardAction/IncludeAction的总结[/color]
[color=red]
4.详细请参考:
(1)
[url=http://blog.csdn.net/newpiaoyun/archive/2008/09/10/2907703.aspx]http://blog.csdn.net/newpiaoyun/archive/2008/09/10/2907703.aspx[/url][/color]
(2)
[url=http://huangliangbao.iteye.com/blog/816332]http://huangliangbao.iteye.com/blog/816332[/url]
[color=green]5.总结:
这样我们就可以不再在execute方法中写那么多的if(){}else(){}咯
[/color]
一、
让Action方法继承至DispatchAction
二、在struts-config.xml中配置<action>的parameter属性,相当于map的key,一个key可以对应多个value哦!
三、在视图层testPara.jsp中,在url中配置参数key-value,相当于一个key可以对应多个value哦!实际上就是一个类对应到多个方法!
[color=red]最后,有图有真相:[/color]
[img]http://dl.iteye.com/upload/picture/pic/92508/76497730-a24e-3bd1-b3bf-f8b9c69a8a06.jpg[/img]
.
1.简介:
没有struts之前,使用servlet,最常用的是 doGet,doPost,service方法,如果有些经验的程序员会合理的使用这三个方法:如在用户发出get的请求时,将用户请求在doGet方法中处理,用户发出post请求时,将用户的请求用doPost请求处理,必要时加上service方法去处理那些在一个servlet中必须执行的请求,用户的请求大体也就这三类,但是如果细分,一个“编辑”,“删除”,“查看”等操作都是doGet的范围,当然也可以都写到serice方法中或 doPost中处理,这样为了区分这些请求,我们通常都要在程序中加入一个判断的参数,如:operate,然后在程序中判断 if operate.equals("update")....,if operate.equals("del")....,if operate.equals("view")....等,实际上这只是个简单的逻辑,如果业务更加复杂,你可能写更多的类时operate的参数,这样就造成程序中有若干if..else if...else if ..,即便你有非常好的编码规范,整齐的缩进,这个程序也相当难维护;而用到struts时,你又可能把这些参数都写到execute方法中;那么最好的方法还是将这些逻辑分开处理,如果执行“编辑”操作的时候调用“编辑”对应的方法,执行“删除”的时候调用“删除”对应的方法...将是比较理想的结果,为了实现这个应用要求,struts引入许多类型的工具类,如:MappingDispathAction,LookDispachAction,DispatchAction,以满足不同要求的需要,这样你在struts-config.xml文件的action元素中增加 parameter属性即可实现这个功能。
[/color]
[color=red]
2.下面是Struts中的一些常用Action如DispatchAction/LookupDispatchAction/MappingDispatchAction/ForwardAction/IncludeAction的总结[/color]
② 第二就是使UserAction继承DispatchAction,不需要重写execute方法:
public ActionForward create(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些create的逻辑
// ……
return mapping.findForward("createUser");
}
public ActionForward save(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些save的逻辑
// ……
return mapping.findForward("saveUser");
}
DispatchAction 在配置上和一般Action稍有不同,就是要在Action配置中多一个parametr属性,这个属性可以指定执行DispatchAction中对应的方法。
struts-config.xml 中:
<action path="/processUser" type="examples.UserAction"
name="userForm"
scope="request"
parameter="method">
<forward name="createUser" path="/pages/listUser.jsp"/>
<forward name="saveUser" path="/pages/saveUser.jsp"/>
</action>
[color=red]
4.详细请参考:
(1)
[url=http://blog.csdn.net/newpiaoyun/archive/2008/09/10/2907703.aspx]http://blog.csdn.net/newpiaoyun/archive/2008/09/10/2907703.aspx[/url][/color]
(2)
[url=http://huangliangbao.iteye.com/blog/816332]http://huangliangbao.iteye.com/blog/816332[/url]
[color=green]5.总结:
这样我们就可以不再在execute方法中写那么多的if(){}else(){}咯
[/color]
一、
让Action方法继承至DispatchAction
package com.cdl.mail.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
public class StudentAction extends DispatchAction {
//不需要重写execute方法了
// public ActionForward execute(ActionMapping mapping, ActionForm form,
// HttpServletRequest request, HttpServletResponse response) {
// String paraStr = request.getParameter("actionMethod");
// System.out.println("execute方法获得参数:" + paraStr);
// return mapping.findForward("success");
// }
public ActionForward isExist(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String paraStr = request.getParameter("actionMethod");
System.out.println("isExist方法获得参数:" + paraStr);
return mapping.findForward("success");
}
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String paraStr = request.getParameter("actionMethod");
System.out.println("save方法获得参数:" + paraStr);
return mapping.findForward("success");
}
}
二、在struts-config.xml中配置<action>的parameter属性,相当于map的key,一个key可以对应多个value哦!
<action parameter="actionMethod" path="/student"
type="com.cdl.mail.struts.action.StudentAction">
<set-property property="cancellable" value="true" />
<forward name="success" path="/index.jsp" />
</action>
三、在视图层testPara.jsp中,在url中配置参数key-value,相当于一个key可以对应多个value哦!实际上就是一个类对应到多个方法!
<body>
<a href="student.do?actionMethod=isExist">执行isExist方法</a> <br>
<a href="student.do?actionMethod=save">执行save方法</a> <br>
</body>
[color=red]最后,有图有真相:[/color]
[img]http://dl.iteye.com/upload/picture/pic/92508/76497730-a24e-3bd1-b3bf-f8b9c69a8a06.jpg[/img]
.