我调试到ActionServlet中的 
protected void process(HttpServletRequest request, HttpServletResponse response)方法,里面有下面几句代码 
          RequestProcessor processor = getProcessorForModule(config); 
        if (processor == null) { 
            processor = getRequestProcessor(config); 
        } 
        processor.process(request, response); 
创建出来的processor的类型我发现是org.apache.struts.chain.ComposableRequestProcessor,里面覆盖了process方法,进入process方法后我没有看见那些处理请求的代码,比如封装ActionForm等等,里面仅仅有几句代码 
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(); 
    }我一直跟踪下去也没有发现什么, 
,在原生的 
org.apache.struts.action.RequestProcessor类里面有这些代码 
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); 
    },我在这些代码上面加断点,可是一直没有看见进入代码块 我主要就是想知道比如ActionForm是如何创建的,这个RequestProcessor好像名堂比较多,我知道是可以配置的,我现在的例子是没有配置的,就是默认的,我记得以前调试的时候创建的processor类就是RequestProcessor类,可是今天调试发现居然是他的子类,而且子类还覆盖了他的方法,但是最后什么时候调用父类的方法我一直没有发现 今天之所以去看源码,主要是发现一个问题,很奇怪,比如我请求一个UserAction想显示人员列表,请求url为/user/list.do,我如果不加任何参数,居然到Action的execute的方法里面的时候ActionForm是null值,也就是没有给我创建ActionForm,我觉得就算我没有请求参数,也起码要创建一个ActionForm吧,里面没有值当然是正常的了 

解决方案 »

  1.   

    struts  前台   页面  还有对应的formbean  
    后台 action  逻辑什么滴
    页面中的页面元素,比如说你弄个 文本框来盛放姓名什么的,如果不是url中?后添加的参数,就得放在这个页面元素对应的formbean中,不然你后台怎么去取? 
    也就是说,前台传参,到后台。 要么通过url ?后参数过去,要么  对应表单元素--->formbean 然后后台去取。