我调试到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吧,里面没有值当然是正常的了