SpringMVC源码(六)Controller控制器4-View视图解析器

ParameterizableViewController 控制器解析:
可参数化视图控制器(ParameterizableViewController),可参数化视图控制器只是简单的返回配置的视图名,不进行功能处理。这个controller可以选择直接将一个request请求到JSP页面。这样做的好处就是不用向客户端暴露具体的视图技术而只是给出了具体的controller URL,而具体的视图则由视图解析器来决定。
具体代码:
private String viewName;
		
	protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		return new ModelAndView(getViewName(), RequestContextUtils.getInputFlashMap(request));
	}
springmvc.xml配置:
	<bean name="/mvc"   
		class="org.springframework.web.servlet.mvc.ParameterizableViewController">  
		<property name="viewName" value="springmvc"/>  
	</bean>  
	

该控制器接收到请求后直接选择参数化的视图,这样的好处是在配置文件中配置,从而避免程序的硬编码,比如像帮助页面等不需要进行功能处理,因此直接使用该控制器映射到视图。

--------------------------------------------------------------------------------------------------------------------------------------------------

UrlFilenameViewController 控制器解析:

UrlFilenameViewController也是一个视图解析控制器,不过它是通过将URL翻译成为视图名,不需要功能处理,并且返回。UrlFilenameViewController继承AbstractUrlViewController,UrlFilenameViewController的handleRequestInternal方法在AbstractUrlViewController实现:

protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
		String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
		String viewName = getViewNameForRequest(request);
		if (logger.isDebugEnabled()) {
			logger.debug("Returning view name '" + viewName + "' for lookup path [" + lookupPath + "]");
		}
		return new ModelAndView(viewName, RequestContextUtils.getInputFlashMap(request));
	}
	//获取视图名称由UrlFilenameViewController来实现。
	protected abstract String getViewNameForRequest(HttpServletRequest request);

UrlFilenameViewController具体实现:

	//请求对象获取视图名字
	protected String getViewNameForRequest(HttpServletRequest request) {
		String uri = extractOperableUrl(request);
		return getViewNameForUrlPath(uri);
	}
	//根据uri地址获取到视图名字
	protected String getViewNameForUrlPath(String uri) {
		String viewName = this.viewNameCache.get(uri);
		if (viewName == null) {
			viewName = extractViewNameFromUrlPath(uri);
			viewName = postProcessViewName(viewName);
			this.viewNameCache.put(uri, viewName);
		}
		return viewName;
	}







参考文章:

http://www.bubuko.com/infodetail-1176622.html



猜你喜欢

转载自blog.csdn.net/superpojo/article/details/72964017
今日推荐