UrlBasedViewResolver类简介说明

java-教程王 SpringMVC 发布时间:2022-01-01 10:14:42 阅读数:5287 1
下文讲述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>
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringMVC/202201/2115.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者