hellolengfenga
hellolengfenga
2010-04-09 01:41

请问一个Struts1原理的一个非常郁闷的问题,我调试到源码还是找不出原因,希望解决,谢谢

已采纳

我调试到ActionServlet中的
[color=red]protected void process(HttpServletRequest request, HttpServletResponse response)[/color]方法,里面有下面几句代码
[color=red] RequestProcessor processor = getProcessorForModule(config);
if (processor == null) {
processor = getRequestProcessor(config);
}
processor.process(request, response);[/color]
创建出来的processor的类型我发现是org.apache.struts.chain.ComposableRequestProcessor,里面覆盖了process方法,进入process方法后我没有看见那些处理请求的代码,比如封装ActionForm等等,里面仅仅有几句代码
[color=red] public void process(HttpServletRequest request, HttpServletResponse response) {
request = processMultipart(request);
ActionContext context = contextInstance(request, response);
//Create and execute the command.
command.execute(context);
context.release();
}[/color]我一直跟踪下去也没有发现什么,
,在原生的
org.apache.struts.action.RequestProcessor类里面有这些代码
[color=red] public void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String path = processPath(request, response);
if (path == null) {
return;
}
if (!processPreprocess(request, response)) {
return;
}
ActionMapping mapping = processMapping(request, response, path);
if (mapping == null) {
return;
}

    if (!processForward(request, response, mapping)) {
        return;
    }
    if (!processInclude(request, response, mapping)) {
        return;
    }
    Action action = processActionCreate(request, response, mapping);

    if (action == null) {
        return;
    }
    ActionForward forward =
        processActionPerform(request, response, action, form, mapping);
    processForwardConfig(request, response, forward);
}[/color],我在这些代码上面加断点,可是一直没有看见进入代码块

我主要就是想知道比如ActionForm是如何创建的,这个RequestProcessor好像名堂比较多,我知道是可以配置的,我现在的例子是没有配置的,就是默认的,我记得以前调试的时候创建的processor类就是RequestProcessor类,可是今天调试发现居然是他的子类,而且子类还覆盖了他的方法,但是最后什么时候调用父类的方法我一直没有发现

今天之所以去看源码,主要是发现一个问题,很奇怪,比如我请求一个UserAction想显示人员列表,请求url为/user/list.do,我如果不加任何参数,居然到Action的execute的方法里面的时候ActionForm是null值,也就是没有给我创建ActionForm,我觉得就算我没有请求参数,也起码要创建一个ActionForm吧,里面没有值当然是正常的了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • magicfreezing magicfreezing 11年前

    Struts1很久不用了,但是根据你的描述我觉得没必要深究代码

    更大的可能是你的配置可能出错了,请仔细看一下你action的配置,还有相关的formbean的配置,另外看看提交的表单的各个空间里面的name和formbean里是否对应

    我觉得你说的问题,应该是出在这么几点上,仔细检查下吧 :D

    点赞 评论 复制链接分享
  • joliny joliny 11年前

    是不是自己给new了一个ActionForm
    注意exceute的form是强制性类型转换过来的,曾经碰到过人是这么干的。

    点赞 评论 复制链接分享

相关推荐