Spring Web MVC 多viewResolver视图解析器解决方案
2020-02-02 14:25
1261 查看
viewResolver的定义如下:
public interface ViewResolver { View resolveViewName(String viewName, Locale locale) throws Exception; }
在spring 中,常用的ViewResolver 有如下几种:
InternalResourceViewResolver | 将逻辑视图名字解析为一个路径 |
BeanNameViewResolver | 将逻辑视图名字解析为bean的Name属性,从而根据name属性,找定义View的bean |
ResourceBundleResolver | 和BeanNameViewResolver一样,只不过定义的view-bean都在一个properties文件中,用这个类进行加载这个properties文件 |
XmlViewResolver | 和ResourceBundleResolver一样,只不过定义的view-bean在一个xml文件中,用这个类来加载xml文件 |
当我们需要多个viewResolver的时候,spring 框架为我们提供了很好的支持,我们只要在[spring-dispatcher-name]-servlet.xml中定义多个ViewResolver就可以了。如:
<!-- 定义JSP视图解析器--> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> <property name="order" value="1" /> </bean> <bean id="freemarkerViewResolver" class="com.founder.web.commom.springmvc.view.ExtFreeMarkerViewResolver"> <property name="contentType" value="text/html; charset=UTF-8"/> <property name="exposeRequestAttributes" value="false"/> <property name="exposeSessionAttributes" value="false"/> <property name="exposeSpringMacroHelpers" value="true"/> <property name="cacheUnresolved" value="false"/> <property name="order" value="0" /> </bean>
DispatcherServlet会加载所有的viewResolver到一个list中,并按照优先级进行解析。
注意:①order中的值越小,优先级越高。
②而id为viewResolver的viewResolver的优先级是最低的。
PS:
如果某个解析器没有找到合适的视图,Spring会在上下文中寻找是否配置了其它的解析器。 如果有,它会继续进行解析,否则,Srping会抛出一个
Exception。
要记住,当一个视图解析器找不到合适的视图时,它可能 返回null值。 但是,不是每个解析器都这么做。这是因为,在某些情况下,解析器可能无法侦测出符合要求的视图是否存在。 比如,
InternalResourceViewResolver在内部调用了RequestDispatcher。 请求分发是检查一个JSP文件是否存在的唯一方法,不幸的是,这个方法只能用一次。 同样的问题在VelocityViewResolver和其它解析器中也有。 当使用这些解析器时,最好仔细阅读它们的Javadoc,看看需要的解析器是否无法发现不存在的视图。 这个问题产生的副作用是,如果InternalResourceViewResolver解析器没有放在链的末端,InternalResourceViewResolver后面的那些解析器根本得不到使用, 因为InternalResourceViewResolver总是返回一个视图!
转载于:https://www.cnblogs.com/tq03/p/4958301.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Spring Web MVC 多viewResolver视图解析器解决方案
- Spring Web MVC 多viewResolver视图解析器解决方案
- Spring web MVC 框架之 视图解析器(ViewResolver)
- Spring MVC视图解析器:Spring MVC XmlViewResolver示例
- Spring Web MVC 多viewResolver解决方案
- Spring Web MVC 多viewResolver解决方案
- SpringMVC框架的视图解析器ViewResolver想用html不用jsp的spring-mvc.xml文件配置
- 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver
- spring视图解析器XmlViewResolver的用法介绍.
- Spring mvc ContentNegotiatingViewResolver 根据路径后缀,选择不同视图
- SpringMVC ContentNegotiatingViewResolver -- 根据请求资源名选择视图
- spring mvc ContentNegotiatingViewResolver 根据路径后缀,选择不同视图
- 第七章:视图解析器——深入浅出学Spring Web MVC
- spring学习笔记:配置视图解析器ViewResolver
- SpringWeb MVC处理请求的流程:(处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件)
- 第七章:视图解析器——深入浅出学Spring Web MVC
- spring-mvc 3.2.0 多视图解析配置实例 ContentNegotiatingViewResolver
- spring-freemarker.xml 视图解析器 ContentNegotiatingViewResolver 源码分析
- (csdn内转载)spring学习笔记:配置视图解析器ViewResolver
- spring-mvc 3.2.0 多视图解析配置实例 ContentNegotiatingViewResolver