快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
   protected void exposeHelpers(HttpServletRequest request) throws Exception {      JstlUtils.exposeLocalizationContext(request, this.jstlAwareMessageSource);    } }

在JstlUtils中包含了对于其他而言jstl特殊的数据处理和设置。

过程是不是很长?我们现在在哪里了?呵呵,我们刚刚完成的事MVC中View的render, 对于InternalResourceView的render 过程比较简单只是完成一个资源的重定向处理。需 要做的就是得到实际view的internalResource路径,然后转发到那个资源中去。怎样得到 资源的路径呢通过调用:

Java代码

protected String prepareForRendering(HttpServletRequest request, HttpServletResponse response)        throws Exception {      return getUrl();    }

那这个url在哪里生成呢?我们在View相关的代码中没有找到,实际上,他在 ViewRosolve的时候就生成了,在UrlBasedViewResolver中:

Java代码

protected AbstractUrlBasedView buildView(String viewName) throws Exception {      AbstractUrlBasedView view = (AbstractUrlBasedView) BeanUtils.instantiateClass(getViewClass());      view.setUrl(getPrefix() + viewName + getSuffix());      String contentType = getContentType();      if (contentType != null) {        view.setContentType(contentType);      }      view.setRequestContextAttribute(getRequestContextAttribute());      view.setAttributesMap(getAttributesMap());      return view;    }

这里是生成View的地方,自然也把生成的url和其他一些和view相关的属性也配置好了 。

那这个ViewResolve是什么时候被调用的呢?哈哈,我们这样又要回到 DispatcherServlet中去看看究竟,在DispatcherServlet中:

Java代码

protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response)        throws Exception {      ........      View view = null;      // 这里设置视图名为默认的名字      if (!mv.hasView()) {        mv.setViewName(getDefaultViewName(request));      }      if (mv.isReference()) {        //这里对视图名进行解析,在解析的过程中根据需要生成实际需要的视 图对象。        view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);       ..........      }     ......   }

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

时间:2011-03-29 javaeye jiwenke

下面是对视图名进行解析的具体过程:

Java代码

protected View resolveViewName(String viewName, Map model, Locale locale, HttpServletRequest request)        throws Exception {      //我们有可能不止一个视图解析器      for (Iterator it = this.viewResolvers.iterator(); it.hasNext();) {        ViewResolver viewResolver = (ViewResolver) it.next();        //这里是视图解析器进行解析并生成视图的过程。        View view = viewResolver.resolveViewName(viewName, locale);        if (view != null) {          return view;        }      }      return null;    }

这里调用具体的ViewResolver对视图的名字进行解析 - 除了单纯的解析之外,它还根 据我们的要求生成了我们实际需要的视图对象。具体的viewResolver在bean定义文件中进 行定义同时在 initViewResolver()方法中被初始化

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