UrlBasedViewResolver类简介说明
下文讲述UrlBasedViewResolver类的简介说明,如下所示:
UrlBasedViewResolver类的简介说明
UrlBasedViewResolver是对ViewResolver的一种简单实现同时继承AbstractCachingViewResolverUrlBasedViewResolver类的功能: 可使用拼接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的时候我们必须使用JstlViewUrlBasedViewResolver类源码说明
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>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。