相信用过Struts框架的朋友应该都知道有个叫DispatchAction的东西,主要是用来解决因Action过多而导致代码文件膨胀的。
我在此首先假设有个自己写的Action类叫UserAction,并且继承自DispatchAction,同时,在UserAction写了saveUser()、deleteUser()、updateUser()三个方面,在Struts配置文件中对应的parameter参数配置为method,path参数配置为userAction。那么,对应与客户端调用UserAction中相应方法的方式为:
.../userAction.do?method=saveUser
.../userAction.do?method=deleteUser
.../userAction.do?method=updateUser
虽然,相比写三个普通的Action或者在一个Action通过request.getParameter()的方式去实现有一定的好处,但是,同时,也带来了一个问题。万一由于用户误操作修改了method之后的参数方法,且方法并未在UserAction中出现,那么则会抛出名为NoSuchMethodException的异常。下面对于这个问题,提供一些解决该问题的思路。
protected Method getMethod(String name)
throws NoSuchMethodException {
synchronized(methods) {
Method method = (Method) methods.get(name);
if (method == null) {
method = clazz.getMethod(name, types);
methods.put(name, method);
}
return (method);
}
}
通过阅读DispatchAction的源码,其中里面有这么一段代码,抛出了上述提及的异常,其实,我们可以对DispatchAction这个类进行下改造方可解决问题。
protected Method getMethod(String name)
{
synchronized(methods) {
Method method = (Method) methods.get(name);
if (method == null) {
try {
method = clazz.getMethod(name, types);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
//当出现异常时,抛出一个自定义的异常,同时跳转错误提示页码,并显示错误信息!
throw new AppException("操作错误,请检查操作!");
}
methods.put(name, method);
}
return (method);
}
}
通过以上的改造,那么对于method参数,不管它的值怎么修改都不会直接抛出一堆普通用户所看不懂的错误信息了,而是跳转到了相应的错误提示页面,增强了系统的友好性。其实,这个方面也并没什么技术含量,无非就是稍微改造了下源代码。
对于DispatchAction如果参数method省略的话,可以重写它的unspecified()方法。
以上是个人在使用DispatchAction过程中的一些心得。其实任何事物都是有两面性的,看你怎么权衡了。
DispatchAction的优点上面也有简要提及,对于它的缺点除了会产生上述问题,还有个问题就是后台代码的方法名会因此而暴露在地址栏。当然也有一些隐藏的方法,比如利用Javascript动态生成一个form采用post方式提交,但是如果存在参数的传递时,问题就会变得有些复杂。不知通过进一步改造
DispatchAction是否可解决问题,本人还没研究过……
分享到:
相关推荐
一个比较简单的struts的dispatchAction 类的入门案例,适合初学者理解dispatchAction
Struts(DispatchAction) + 存储过程 => 实现分页效果
Struts 之 DispatchAction add
简单的DispatchAction实例。。。。。。。。
Struts1中怎样实现DispatchAction配置多个input属性\Struts1中怎样实现DispatchAction配置多个input属性
最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助。在此谢谢各位!...
解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证 你可以先参看我的blog文章:http://blog.csdn.net/qjyong/archive/2008/11/16/3311688.aspx 再决定是否下载。
03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar
在页面中用js传递执行方法参数,传递到后台执行, 在你用的Action类中的方法名前加“run“及可被调用。
struts中的DispatchAction应用实例
利用struts标签,dispatchAction,实现增删改查 有利于初学者掌握struts!
DispatchAction与MappingDispatchAction
自习struts时做时,大家可以互相交流一下
主要介绍了深入解析Java的Struts框架中的控制器DispatchAction,Struts是Java的SSH三大web开发框架之一,需要的朋友可以参考下
用struts1.2写的一个计算器示例程序,供研究struts原理的初学者参考,其中action继承的DispatchAction。
import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction等缺少
Struts 之 DispatchAction
04 Struts_04DispatchAction : 分发Action,根据设置的参数值提交到不同的方法进行处理业务,演示数学运算 05 Struts_05DynaActionForm : 相对应ActionForm来说,动态ActionForm只需要在配置文件中配置就可以了,...
传智播客的struts高级实战进阶 MVC模式的回顾 回顾Struts的请求处理时序图 使用超连接的技巧 封装Formbean数据时的问题 防止表单重复提交 使用复选框的技巧 ...Struts请求处理过程的源码分析与digester
ACCP_Y2_STRUTS指导学习1_青鸟搜藏.rar 添加书签,书签列表,TAG云图;三层结构,STRUTS,DISPATCHACTION,Struts报错机制