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的时候我们必须使用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>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


