中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring ViewResolver

發布時間:2020-08-01 20:52:13 來源:網絡 閱讀:985 作者:xiaosawuhen 欄目:開發技術

Spring ViewResolver

AbstractCachingViewResolver、XmlViewResolver、ResourceBundleViewResolver、UrlBasedViewResolver、InternalResourceViewResolver、VelocityViewResolver、FreeMarkerViewResolver
、ContentNegotiatingViewResolver


加載

org.springframework.web.servlet.view.ContentNegotiatingViewResolver

問題點:

    是不是所有的ViewResolver都是通過ContentNegotiatingViewResolver這個加載的 --> 不是

    ContentNegotiatingViewResolver起到的作用是什么

    只有一個jspView的時候會不會調用ContentNegotiatingViewResolver

	private void initViewResolvers(ApplicationContext context) {
		this.viewResolvers = null;

		if (this.detectAllViewResolvers) {
			// Find all ViewResolvers in the ApplicationContext, including ancestor contexts.
			Map<String, ViewResolver> matchingBeans =
					BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false);
			if (!matchingBeans.isEmpty()) {
				this.viewResolvers = new ArrayList<>(matchingBeans.values());
				// We keep ViewResolvers in sorted order.
				AnnotationAwareOrderComparator.sort(this.viewResolvers);
			}
		}
		else {
			try {
				ViewResolver vr = context.getBean(VIEW_RESOLVER_BEAN_NAME, ViewResolver.class);
				this.viewResolvers = Collections.singletonList(vr);
			}
			catch (NoSuchBeanDefinitionException ex) {
				// Ignore, we'll add a default ViewResolver later.
			}
		}

		// Ensure we have at least one ViewResolver, by registering
		// a default ViewResolver if no other resolvers are found.
		if (this.viewResolvers == null) {
			this.viewResolvers = getDefaultStrategies(context, ViewResolver.class);
			if (logger.isDebugEnabled()) {
				logger.debug("No ViewResolvers found in servlet '" + getServletName() + "': using default");
			}
		}
	}



doDispatch

processDispatchResult

render:

			View view;
			if (mv.isReference()) {
				// We need to resolve the view name.
				view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
				if (view == null) {
					throw new ServletException("Could not resolve view with name '" + mv.getViewName() +
							"' in servlet with name '" + getServletName() + "'");
				}
			}
			else {
				// No need to lookup: the ModelAndView object contains the actual View object.
				view = mv.getView();
				if (view == null) {
					throw new ServletException("ModelAndView [" + mv + "] neither contains a view name nor a " +
							"View object in servlet with name '" + getServletName() + "'");
				}
			}

resolveViewName:

	protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale,
			HttpServletRequest request) throws Exception {

		for (ViewResolver viewResolver : this.viewResolvers) {
			View view = viewResolver.resolveViewName(viewName, locale);
			if (view != null) {
				return view;
			}
		}
		return null;
	}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仲巴县| 张北县| 南澳县| 呼玛县| 扎鲁特旗| 合山市| 博白县| 米易县| 凤冈县| 星子县| 磴口县| 九龙县| 贵溪市| 平乐县| 辽源市| 汨罗市| 凉山| 农安县| 江永县| 威信县| 台东县| 凉城县| 通许县| 嘉峪关市| 诏安县| 荔浦县| 孝感市| 咸宁市| 韶关市| 胶南市| 湘西| 五指山市| 清苑县| 西乡县| 长垣县| 南平市| 黄龙县| 郎溪县| 乌鲁木齐县| 迁安市| 印江|