日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

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;
	}

}



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 好叼视频 | 蜜臀91丨九色丨蝌蚪中文 | 久久国产精品久久久久久 | 精品视频久久久 | 91插插视频| 日韩精品免费 | 三级网站免费观看 | 久久成人国产 | 日韩三级一区 | a级片一区二区三区 | 亚洲福利网 | 国产又黄又爽又色在线视频播放 | 国产精品日韩一区二区三区 | 成人影片免费 | av在线免费网址 | 精品久久久噜噜噜久久x99a | 欧美日韩高清在线观看 | 日韩三区在线 | 欧美日韩免费网站 | 天堂成人国产精品一区 | 蜜桃导航-精品导航 | 激情网五月天 | 亚洲成人在线网站 | 中文字幕www | 网站免费黄| 亚洲国产成人精品女人久久久 | 国产h片在线观看 | 亚洲专区 变态 另类 | 久久精品一区二区 | 黄色一级片在线看 | 国产精品黄色 | 欧美日韩免费一区二区三区 | 亚洲经典一区 | 婷婷99狠狠躁天天躁中文字幕 | 伊人精品 | 国产成人高清视频 | 精品二区 | 国产一区二区视频在线播放 | 九九热在线播放 | 国产午夜亚洲精品理论片色戒 | 色啪综合 |