多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > springMVC源碼分析--RequestToViewNameTranslator請求到視圖名稱的轉換

springMVC源碼分析--RequestToViewNameTranslator請求到視圖名稱的轉換

來源:程序員人生   發布時間:2017-02-17 09:17:32 閱讀次數:4739次

RequestToViewNameTranslator可以在處理器返回的View為空時使用它根據Request獲得viewName。RequestToViewNameTranslator提供的實現類只有1個DefaultRequestToViewNameTranslator。

接口RequestToViewNameTranslator中定義的以下:提供了getViewName抽象方法,其實就是根據request要求獲得來組裝視圖名稱。

public interface RequestToViewNameTranslator {

	/**
	 * Translate the given {@link HttpServletRequest} into a view name.
	 * @param request the incoming {@link HttpServletRequest} providing
	 * the context from which a view name is to be resolved
	 * @return the view name (or {@code null} if no default found)
	 * @throws Exception if view name translation fails
	 */
	String getViewName(HttpServletRequest request) throws Exception;

}

其實現類DefaultRequestToViewNameTranslator中的實現以下:其實其簡單實現就是將要求名稱作為視圖名稱返回,邏輯還是比較簡單的。

@Override
	public String getViewName(HttpServletRequest request) {
		String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
		return (this.prefix + transformPath(lookupPath) + this.suffix);
	}
接下來我們看看RequestToViewNameTranslator在springMVC中的具體運行流程:

首先在DispatcherServlet的doDispatch函數中會設置默許的視圖名

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
		......
		//設置默許的視圖名稱
		applyDefaultViewName(processedRequest, mv);
		......
	}
在applyDefaultViewName中會判斷ModelAndView的hasView為空時,就設置viewName
private void applyDefaultViewName(HttpServletRequest request, ModelAndView mv) throws Exception {
		if (mv != null && !mv.hasView()) {
			mv.setViewName(getDefaultViewName(request));
		}
	}

getDefaultViewName的實現邏輯還是在ViewNameTranslator中。

protected String getDefaultViewName(HttpServletRequest request) throws Exception {
		return this.viewNameTranslator.getViewName(request);
	}
在DefaultViewNameTranslator中實現的getViewName的邏輯以下,其實就是將要求路徑作為ViewName
@Override
	public String getViewName(HttpServletRequest request) {
		String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
		return (this.prefix + transformPath(lookupPath) + this.suffix);
	}

實現類DefaultViewNameTranslator的完全源碼以下:

public class DefaultRequestToViewNameTranslator implements RequestToViewNameTranslator {

	private static final String SLASH = "/";


	private String prefix = "";

	private String suffix = "";

	private String separator = SLASH;

	private boolean stripLeadingSlash = true;

	private boolean stripTrailingSlash = true;

	private boolean stripExtension = true;

	private UrlPathHelper urlPathHelper = new UrlPathHelper();


	
	public void setPrefix(String prefix) {
		this.prefix = (prefix != null ? prefix : "");
	}

	public void setSuffix(String suffix) {
		this.suffix = (suffix != null ? suffix : "");
	}

	public void setSeparator(String separator) {
		this.separator = separator;
	}

	public void setStripLeadingSlash(boolean stripLeadingSlash) {
		this.stripLeadingSlash = stripLeadingSlash;
	}

	public void setStripTrailingSlash(boolean stripTrailingSlash) {
		this.stripTrailingSlash = stripTrailingSlash;
	}

	public void setStripExtension(boolean stripExtension) {
		this.stripExtension = stripExtension;
	}

	
	public void setAlwaysUseFullPath(boolean alwaysUseFullPath) {
		this.urlPathHelper.setAlwaysUseFullPath(alwaysUseFullPath);
	}

	
	public void setUrlDecode(boolean urlDecode) {
		this.urlPathHelper.setUrlDecode(urlDecode);
	}

	public void setRemoveSemicolonContent(boolean removeSemicolonContent) {
		this.urlPathHelper.setRemoveSemicolonContent(removeSemicolonContent);
	}

	public void setUrlPathHelper(UrlPathHelper urlPathHelper) {
		Assert.notNull(urlPathHelper, "UrlPathHelper must not be null");
		this.urlPathHelper = urlPathHelper;
	}

	//根據要求獲得視圖名稱
	@Override
	public String getViewName(HttpServletRequest request) {
		String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
		return (this.prefix + transformPath(lookupPath) + this.suffix);
	}

	
	protected String transformPath(String lookupPath) {
		String path = lookupPath;
		if (this.stripLeadingSlash && path.startsWith(SLASH)) {
			path = path.substring(1);
		}
		if (this.stripTrailingSlash && path.endsWith(SLASH)) {
			path = path.substring(0, path.length() - 1);
		}
		if (this.stripExtension) {
			path = StringUtils.stripFilenameExtension(path);
		}
		if (!SLASH.equals(this.separator)) {
			path = StringUtils.replace(path, SLASH, this.separator);
		}
		return path;
	}

}



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 牛仔裤美女国产精品毛片 | 欧美毛片免费观看 | 亚洲最新 | 成人在线手机视频 | 欧美极度另类videos | 亚洲另类视频在线观看 | 最近的中文字幕视频完整 | 日本一区二区三区四区五区 | 无码免费一区二区三区免费播放 | 亚洲精品成人在线 | 国产男女爽爽爽爽爽免费视频 | 亚洲欧美中文字幕专区 | 国产免费一区二区三区在线 | 在线偷拍自拍 | 久久精品国产精品亚洲20 | h视频在线免费看 | 亚洲综合久久综合激情久久 | 性xxxxⅹhd成人 | 欧美黑人猛交 | www天堂在线观看 | 国产精品久久久久乳精品爆 | 欧美国产日韩精品 | 国产性老妇女做爰在线 | 国产精品麻豆高清在线观看 | 高清欧美色欧美综合网站 | 日本护士xxxx黑人巨大 | 亚洲免费闲人蜜桃 | 777成了人精品视频 777欧美 | 亚洲成人黄色在线观看 | 日韩精品一区二区三区免费视频 | 亚洲伊人久久大香线蕉在观 | 国产xx在线观看 | 噜噜噜在线 | 666精品国产精品亚洲 | 一级特黄aa大片一又好看 | 久久精品全国免费观看国产 | 秋霞一级黄色片 | 操操网址 | 波多野结衣手机在线视频 | 亚洲线精品久久一区二区三区 | 欧美18毛片 |