快速业务通道

Struts源码研究 - Action-Input属性篇 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
getInputForward()) {ForwardConfig forward = mapping.findForward(input);processForwardConfig( request, response, forward);} else {internalModuleRelativeForward(input, request, response);}return (false);}

Struts源码研究 - Action-Input属性篇(4)

时间:2011-08-18

在出错信息中,提到了internalModuleRelativeForward这个方法,所以着重看以上代码的最后几行,可以看到,如果moduleConfig.getControllerConfig().getInputForward()这个方法返回了false,那么internalModuleRelativeForward这个方法将被调用。inputForward是什么?ModuleConfig是管理所有配置信息的一个manager类,那么moduleConfig.getControllerConfig()这个方法返回的肯定是ControllerConfig这个类的一个实例,那么inputForward肯定是ControllerConfig类的一个成员变量了

再看看struts-config.xml,里面有<controller>这个标签,初步猜测ControllerConfig应该是读取这个标签的一个配置类,而<controller>这个标签应该定义了ActionServlet作为Controller的一些行为!OK,再来看ControllerConfig这个类中有关inputForward这个成员变量的一些代码,如下:

/*** <p>Should the <code>input</code> property of {@link ActionConfig}* instances associated with this module be treated as the* name of a corresponding {@link ForwardConfig}. A <code>false</code>* value treats them as a module-relative path (consistent* with the hard coded behavior of earlier versions of Struts.</p>** @since Struts 1.1*/protected boolean inputForward = false;public boolean getInputForward() {return (this.inputForward);}public void setInputForward(boolean inputForward) {this.inputForward = inputForward;}

开始有点明白了,原来inputForward这个属性默认值是false,那么由于没有配置这个属性,那么上述的那个方法moduleConfig.getControllerConfig().getInputForward()自然就返回false了,Bingo!

那么重点就转移到了internalModuleRelativeForward这个方法了,看这个方法的源代码,如下:

protected void internalModuleRelativeForward(String uri,HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException {// Construct a request dispatcher for the specified pathuri = moduleConfig.getPrefix() + uri;// Delegate the processing of this request// FIXME - exception handling?if (log.isDebugEnabled()) {log.debug(" Delegating via forward to ''" + uri + "''");}doForward(uri, request, response);}protected void doForward(String uri,HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException {// Unwrap the multipart request, if there is one.if (request instanceof MultipartRequestWrapper) {request = ((MultipartRequestWrapper) request).getRequest();}RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);if (rd == null) {response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,getInternal().getMessage("requestDispatcher", uri));return;}rd.forward(request, response);}

Struts源码研究 - Action-Input属性篇(5)

时间:2011-08-18

从上可以看到,这个方法是将uri = moduleConfig.getPrefix() + uri;这个东东传给了doForward方法,而doForward这个方法又调用

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号