Struts源码研究 - Action-Input属性篇 - 编程入门网
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |