快速业务通道

Spring源代码解析(四):Spring MVC - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
收集到一个Map里    Map mergedModel = new HashMap(this.staticAttributes.size() + (model != null ? model.size() : 0));    mergedModel.putAll(this.staticAttributes);    if (model != null) {      mergedModel.putAll(model);    }    // Expose RequestContext?    if (this.requestContextAttribute != null) {      mergedModel.put(this.requestContextAttribute, createRequestContext (request, mergedModel));    }    //这是实际的展现模型数据到视图的调用。    renderMergedOutputModel(mergedModel, request, response); }

注解写的很清楚了,先把所有的数据模型进行整合放到一个Map - mergedModel里,然 后调用renderMergedOutputModel();这个renderMergedOutputModel是一个模板方法,他 的实现在InternalResourceView也就是JstlView的父类:

Java代码

protected void renderMergedOutputModel(        Map model, HttpServletRequest request, HttpServletResponse response) throws Exception {      // Expose the model object as request attributes.      exposeModelAsRequestAttributes(model, request);      // Expose helpers as request attributes, if any.      exposeHelpers(request);      // 这里得到InternalResource定义的内部资源路径。      String dispatcherPath = prepareForRendering(request, response);      //这里把请求转发到前面得到的内部资源路径中去。      RequestDispatcher rd = request.getRequestDispatcher (dispatcherPath);      if (rd == null) {        throw new ServletException(            "Could not get RequestDispatcher for [" + getUrl() + "]: check that this file exists within your WAR");      }      .......    }

首先对模型数据进行处理,exposeModelAsRequestAttributes是在AbstractView中实 现的,这个方法把 ModelAndView中的模型数据和其他request数据统统放到 ServletContext当中去,这样整个模型数据就通过 ServletContext暴露并得到共享使用 了:

Java代码

protected void exposeModelAsRequestAttributes(Map model, HttpServletRequest request) throws Exception {      Iterator it = model.entrySet().iterator();      while (it.hasNext()) {        Map.Entry entry = (Map.Entry) it.next();        ..........        String modelName = (String) entry.getKey();        Object modelValue = entry.getValue();        if (modelValue != null) {          request.setAttribute(modelName, modelValue);        ...........        }        else {          request.removeAttribute(modelName);          .......        }      }    }

Spring源代码解析(四):Spring MVC(9)

时间:2011-03-29 javaeye jiwenke

让我们回到数据处理部分的exposeHelper();这是一个模板方法,其实现在JstlView中 实现:

Java代码

public class JstlView extends InternalResourceView {    private MessageSource jstlAwareMessageSource;    protected void initApplicationContext() {      super.initApplicationContext();      this.jstlAwareMessageSource =          JstlUtils.getJstlAwareMessageSource(getServletContext(), getApplicationContext());    }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号