国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

springMVC源碼分析--視圖AbstractView和InternalResourceView(二)

2019-11-08 01:40:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

上一篇博客 sPRingMVC源碼分析--視圖View(一)中我們介紹了簡(jiǎn)單介紹了View的結(jié)構(gòu)實(shí)現(xiàn)及運(yùn)行流程,接下來(lái)我們介紹一下View的實(shí)現(xiàn)類(lèi)做的處理操作。

AbstractView實(shí)現(xiàn)了render方法,主要做的操作是將model中的參數(shù)和request中的參數(shù)全部都放到Request中,然后就轉(zhuǎn)發(fā)Request就可以了。

	@Override	public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {		if (logger.isTraceEnabled()) {			logger.trace("Rendering view with name '" + this.beanName + "' with model " + model +				" and static attributes " + this.staticAttributes);		}		//將model和request中的參數(shù)全部放到mergedModel中		Map<String, Object> mergedModel = createMergedOutputModel(model, request, response);		//存放頭部信息		prepareResponse(request, response);		//將mergedModel中的參數(shù)值放到request中		renderMergedOutputModel(mergedModel, getRequestToExpose(request), response);	}createMergedOutputModel中的操作就是將所有的數(shù)據(jù)放到mergedModel中。
protected Map<String, Object> createMergedOutputModel(Map<String, ?> model, HttpServletRequest request,			HttpServletResponse response) {		@SuppressWarnings("unchecked")		Map<String, Object> pathVars = (this.exposePathVariables ?				(Map<String, Object>) request.getAttribute(View.PATH_VARIABLES) : null);		// Consolidate static and dynamic model attributes.		int size = this.staticAttributes.size();		size += (model != null ? model.size() : 0);		size += (pathVars != null ? pathVars.size() : 0);		Map<String, Object> mergedModel = new LinkedHashMap<String, Object>(size);		mergedModel.putAll(this.staticAttributes);		if (pathVars != null) {			mergedModel.putAll(pathVars);		}		if (model != null) {			mergedModel.putAll(model);		}		// Expose RequestContext?		if (this.requestContextAttribute != null) {			mergedModel.put(this.requestContextAttribute, createRequestContext(request, response, mergedModel));		}		return mergedModel;	}prepareResponse中的操作就是在頭部中添加信息。
protected void prepareResponse(HttpServletRequest request, HttpServletResponse response) {		if (generatesDownloadContent()) {			response.setHeader("Pragma", "private");			response.setHeader("Cache-Control", "private, must-revalidate");		}	}renderMergedOutputModel是在子類(lèi)中實(shí)現(xiàn)的,我們介紹一下我們經(jīng)常使用的普通jsp源碼使用的InternalResourceView
@Override	protected void renderMergedOutputModel(			Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {		//把model中的所有數(shù)據(jù)放到request中		exposeModelAsRequestAttributes(model, request);		exposeHelpers(request);		//看看是否有跳轉(zhuǎn)頁(yè)面		String dispatcherPath = prepareForRendering(request, response);		// Obtain a RequestDispatcher for the target resource (typically a JSP).		RequestDispatcher rd = getRequestDispatcher(request, dispatcherPath);		if (rd == null) {			throw new ServletException("Could not get RequestDispatcher for [" + getUrl() +					"]: Check that the corresponding file exists within your web application archive!");		}		// If already included or response already committed, perform include, else forward.		if (useInclude(request, response)) {			response.setContentType(getContentType());			if (logger.isDebugEnabled()) {				logger.debug("Including resource [" + getUrl() + "] in InternalResourceView '" + getBeanName() + "'");			}			//加載頁(yè)面			rd.include(request, response);		}		else {			// Note: The forwarded resource is supposed to determine the content type itself.			if (logger.isDebugEnabled()) {				logger.debug("Forwarding to resource [" + getUrl() + "] in InternalResourceView '" + getBeanName() + "'");			}			//轉(zhuǎn)發(fā)操作			rd.forward(request, response);		}	}以上代碼就完成了springMVC的所有處理操作,springMVC最終的操作就是調(diào)用request及response完成請(qǐng)求操作了。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 潼关县| 石屏县| 武乡县| 娄烦县| 瓦房店市| 铅山县| 镇坪县| 抚州市| 南岸区| 新密市| 江安县| 汝阳县| 定襄县| 竹北市| 通渭县| 海晏县| 綦江县| 高邑县| 紫金县| 克东县| 晋宁县| 铜陵市| 崇左市| 维西| 虎林市| 东平县| 潮州市| 揭阳市| 临澧县| 武定县| 凤冈县| 潮州市| 都昌县| 金溪县| 冀州市| 武邑县| 武城县| 扶余县| 黄石市| 平武县| 卢湾区|