UrlBasedViewResolver类简介说明

转自:

UrlBasedViewResolver类简介说明

下文讲述UrlBasedViewResolver类的简介说明,如下所示:

UrlBasedViewResolver类的简介说明

UrlBasedViewResolver是对ViewResolver的一种简单实现同时继承AbstractCachingViewResolver

UrlBasedViewResolver类的功能:
  可使用拼接URL的方式来解析视图
  可指定prefix属性指定一个前缀
  可使用suffix属性指定一个后缀
  然后把返回的逻辑视图名称加上指定的前缀和后缀就是视图的URL
   如prefix=/WEB-INF/jsps/,suffix=.jsp
  返回的视图名称viewName=other/info
  则UrlBasedViewResolver解析出来的视图名称为
   /WEB-INF/jsps/other/info.jsp

一、URLBasedViewResolver支持redirect:前缀

 URLBasedViewResolver视图解析器:
  
   支持返回的视图名称中包含redirect:前缀
   当返回的视图名称是”redirect:info.do”的时候,URLBasedViewResolver发现返回的视图名称包含”redirect:”前缀
   则会把返回的视图名称前缀”redirect:”去掉
   取后面的info.do组成一个RedirectView
   RedirectView中将把请求返回的模型属性组合成查询参数的形式组合到redirect的URL后面
   然后调用HttpServletResponse对象的sendRedirect方法进行重定向

一、URLBasedViewResolver支持forward:前缀

当视图名称中包含forword:
   前缀的视图名称将会被封装成一个InternalResourceView对象
   然后在服务器端利用RequestDispatcher的forword方式跳转到指定的地址
   使用UrlBasedViewResolver的时候必须指定属性viewClass
    表示解析成哪种视图,一般使用较多的就是InternalResourceView
    利用它来展现jsp
   当我们使用JSTL的时候我们必须使用JstlView 

UrlBasedViewResolver类源码说明

 public class UrlBasedViewResolver extends AbstractCachingViewResolver implements Ordered {
 	public static final String FORWARD_URL_PREFIX = "forward:";
    //视图Class
	private Class<?> viewClass;
    //视图名称前缀
	private String prefix = "";
    //视图名称后缀
	private String suffix = "";
   //视图view的content-type
	private String contentType;
    //重定向是否使用相对路径
	private boolean redirectContextRelative = true;
   //是否兼容http1.0的重定向
	private boolean redirectHttp10Compatible = true;
    
	private String[] redirectHosts;

	private String requestContextAttribute;

	/** Map of static attributes, keyed by attribute name (String) */
	private final Map<String, Object> staticAttributes = new HashMap<String, Object>();

	private Boolean exposePathVariables;

	private Boolean exposeContextBeansAsAttributes;

	private String[] exposedContextBeanNames;
    //支持处理的视图名称数组,未设置则全部处理
	private String[] viewNames;
    //优先级 最低
	private int order = Integer.MAX_VALUE;
 
	@Override
	protected View createView(String viewName, Locale locale) throws Exception {
		// If this resolver is not supposed to handle the given view,
		// return null to pass on to the next resolver in the chain.
		//检测是否支持改视图名称处理
		//根据viewNames字符数组中进行检测
		if (!canHandle(viewName, locale)) {
			return null;
		}
		// Check for special "redirect:" prefix.
		//处理redirect开头的视图返回RedirectView
		if (viewName.startsWith(REDIRECT_URL_PREFIX)) {
			String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length());
			RedirectView view = new RedirectView(redirectUrl, isRedirectContextRelative(), isRedirectHttp10Compatible());
			view.setHosts(getRedirectHosts());
			return applyLifecycleMethods(viewName, view);
		}
		// Check for special "forward:" prefix.
		// 处理forward开头的视图
		if (viewName.startsWith(FORWARD_URL_PREFIX)) {
			String forwardUrl = viewName.substring(FORWARD_URL_PREFIX.length());
			return new InternalResourceView(forwardUrl);
		}
		// Else fall back to superclass implementation: calling loadView.
		//其他情况调用父类的view
		return super.createView(viewName, locale);
	}
 
}

注入bean的方法分享

<bean    
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">    
    <property name="prefix" value="/WEB-INF/" />    
    <property name="suffix" value=".jsp" />    
    <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>    
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值