Spring ViewResolver
Spring ViewResolver
AbstractCachingViewResolver、XmlViewResolver、ResourceBundleViewResolver、UrlBasedViewResolver、InternalResourceViewResolver、VelocityViewResolver、FreeMarkerViewResolver
、ContentNegotiatingViewResolver
加载
org.springframework.web.servlet.view.ContentNegotiatingViewResolver
问题点:
是不是所有的ViewResolver都是通过ContentNegotiatingViewResolver这个加载的 --> 不是
ContentNegotiatingViewResolver起到的作用是什么
只有一个jspView的时候会不会调用ContentNegotiatingViewResolver
privatevoidinitViewResolvers(ApplicationContextcontext){this.viewResolvers=null;if(this.detectAllViewResolvers){//FindallViewResolversintheApplicationContext,includingancestorcontexts.Map<String,ViewResolver>matchingBeans=BeanFactoryUtils.beansOfTypeIncludingAncestors(context,ViewResolver.class,true,false);if(!matchingBeans.isEmpty()){this.viewResolvers=newArrayList<>(matchingBeans.values());//WekeepViewResolversinsortedorder.AnnotationAwareOrderComparator.sort(this.viewResolvers);}}else{try{ViewResolvervr=context.getBean(VIEW_RESOLVER_BEAN_NAME,ViewResolver.class);this.viewResolvers=Collections.singletonList(vr);}catch(NoSuchBeanDefinitionExceptionex){//Ignore,we'lladdadefaultViewResolverlater.}}//EnsurewehaveatleastoneViewResolver,byregistering//adefaultViewResolverifnootherresolversarefound.if(this.viewResolvers==null){this.viewResolvers=getDefaultStrategies(context,ViewResolver.class);if(logger.isDebugEnabled()){logger.debug("NoViewResolversfoundinservlet'"+getServletName()+"':usingdefault");}}}
doDispatch
processDispatchResult
render:
Viewview;if(mv.isReference()){//Weneedtoresolvetheviewname.view=resolveViewName(mv.getViewName(),mv.getModelInternal(),locale,request);if(view==null){thrownewServletException("Couldnotresolveviewwithname'"+mv.getViewName()+"'inservletwithname'"+getServletName()+"'");}}else{//Noneedtolookup:theModelAndViewobjectcontainstheactualViewobject.view=mv.getView();if(view==null){thrownewServletException("ModelAndView["+mv+"]neithercontainsaviewnamenora"+"Viewobjectinservletwithname'"+getServletName()+"'");}}
resolveViewName:
protectedViewresolveViewName(StringviewName,Map<String,Object>model,Localelocale,HttpServletRequestrequest)throwsException{for(ViewResolverviewResolver:this.viewResolvers){Viewview=viewResolver.resolveViewName(viewName,locale);if(view!=null){returnview;}}returnnull;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。