视图解析器有很多种,常见的有四种
- InternalResourceViewResolver
默认的视图解析器,只能访问内部资源,无法访问外部资源
- BeanNameViewResolver
视图解析器对象
RedirectView:定义外部资源视图对象
JstlView:定义内部资源视图对象
缺陷:每一个资源都要这样配置,会让整个springmvc.xml变得很臃肿
<!-- 定义一个内部资源视图 -->
<bean id="internalResource" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/jsp/welcome.jsp"/>
</bean>
<!-- 定义一个外部资源视图 -->
<bean id="taobao" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="http://www.taobao.com"/>
</bean>
<!-- 定义一个外部资源视图 -->
<bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="http://www.jd.com"/>
</bean>
<!-- 注册视图解析器 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<!-- 注册处理器 -->
<bean id="/my.do" class="com.bjpowernode.handlers.MyController"/>
- XmlViewResolver
解决上面BeanNameViewResolver要将资源视图都写在springmvc.xml中的臃肿问题,新建另一个Xml文件来存储资源视图链接.
springmvc.xml下
<!-- 注册视图解析器 -->
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location" value="classpath:myViews.xml">
</bean>
<!-- 注册处理器 -->
<bean id="/my.do" class="com.bjpowernode.handlers.MyController"/>
新建的myViews.xml下
<!-- 定义一个内部资源视图 -->
<bean id="internalResource" class="org.springframework.web.servlet.view.JstlView">
<property name="url" value="/WEB-INF/jsp/welcome.jsp"/>
</bean>
<!-- 定义一个外部资源视图 -->
<bean id="taobao" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="http://www.taobao.com"/>
</bean>
<!-- 定义一个外部资源视图 -->
<bean id="jd" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="http://www.jd.com"/>
</bean>
- ResourceBandleViewResolver
和XmlViewResolver差不多,这个是以配置文件的形式储存资源
springmvc.xml
<!-- 注册视图解析器 -->
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="myViews"/>
</bean>
<!-- 注册处理器 -->
<bean id="/my.do" class="com.bjpowernode.handlers.MyController"/>
myViews.properties
taobao.(class)=org.springframework.web.servlet.view.RedirectView
taobao.url=http://www.taobao.com
jd.(class)=org.springframework.web.servlet.view.RedirectView
jd.url=http://www.jd.com
internalResource.(class)=org.springframework.web.servlet.view.JstlView
internalResource.url=/WEB-INF/jsp/welcome.jsp
视图解析器优先级
在注册视图解析器时配置order,数字越小优先级越高(必须大于零)
<!-- 注册视图解析器1 -->
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basename" value="myViews"/>
<property name="order" value="3"/>
</bean>
<!-- 注册视图解析器2 -->
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location" value="classpath:myViews.xml"/>
<property name="order" value="1"/>
</bean>