• 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 staticAttributes = new HashMap();
    
    	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的方法分享

        
            
            
            
    
  • 相关阅读:
    仅在少数市场发售?三星Galaxy Z Fold 6 Slim折叠屏手机更轻更薄
    RCE——远程命令执行(无字母数字篇)
    Matlab高光谱遥感数据处理与混合像元分解实践技术
    云原生一之Docker篇
    WPF中使用LiveCharts绘制散点图
    热加载技术:修改Python代码并实时查看结果 ⛵
    4.Function扩展
    《一》基础
    消防应急照明和疏散指示系统在城市隧道中的应用
    Spring -- Spring jar 包及依赖
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127782562