我调试到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吧,里面没有值当然是正常的了
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吧,里面没有值当然是正常的了
后台 action 逻辑什么滴
页面中的页面元素,比如说你弄个 文本框来盛放姓名什么的,如果不是url中?后添加的参数,就得放在这个页面元素对应的formbean中,不然你后台怎么去取?
也就是说,前台传参,到后台。 要么通过url ?后参数过去,要么 对应表单元素--->formbean 然后后台去取。