5.按名称解析视图以及视图和内容协商
5.1)按照名称解析视图。
从处理程序返回的逻辑视图必须和一个视图模板通过确切的映射策略联系起来。DispatcherServlet 能够自动检测到在Web上下文中声明的实现了ViewResolver接口的的一个或者多个视图解析器Bean。Spring自带了多个ViewResolver的实现。注意,要使用这些解析器都必须在Web上下文中声明这些解析器Bean。
5.1.1)根据模板名称和位置解析视图。InternalResourceViewResolver视图解析器的策略是直接映射到模板名称和位置。这个解析器能够支持Redirect前缀(如:"redirect:welcome")。
<!-- 只能支持解析可由Servlet API的RequestDispatcher转发的视图资源图,如:内部jsp或者servlet。 --> <bean id="internalResourceResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 决定视图类型,如果添加了jstl支持(即有jstl.jar),那么默认就是解析为jstl视图 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- 视图前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 视图后缀 --> <property name="suffix" value=".jsp" /> </bean>
5.1.2)从XML配置文件计息视图。通过配置Bean的方式来解析视图,也可以利用XMLViewResolver从单独的
文件中解析:
<bean class="org.springframework.web.servlet.view.XMLViewResolver"> <!-- 从单独配置文件中加载的时候配置 --> <property name="location" value="/WEB-INF/court-veiws.xml" /> </bean>
下面就包含了一个映射和一个重新定向设定:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="welcome" class="org.springframework.web.servlet.view.JstlView"> <property name="url" value="/WEB-INF/jsp/welcome.jsp" /> </bean> <bean id="redirect" class="org.springframework.web.servlet.view.RedirectView"> <property name="url" value="welcome" /> </bean> </beans>
5.1.3)从资源集解析视图。这个和上面的原理差不多,只是在资源集中声明Bean。这里可以用内置的ResourceBundleViewResolver实现:
<bean id="resourceBundleResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <!-- 从views.properties中解析Bean,views.properties需要放在WEB-INF目录下 --> <property name="basename" value="views" /> </bean>
views.properties内容格式如下:
welcomeRedirect.(class)=org.springframework.web.servlet.view.RedirectView welcomeRedirect.url=welcome.htm
5.1.4) 用多个视图解析器。这些解析器通过order属性来设置优先级,一般InternalResourceViewResolver优先级会放在最后:
<bean id="xmlViewResolver" class="org.springframework.web.servlet.view.XMLViewResolver"> <property name="location" value="/WEB-INF/court-veiws.xml" /> <property name="order" value="#{T(org.springframework.core.Ordered).HIGHEST_PRECEDENCE}" /> </bean> <bean id="resourceBundleResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="views" /> <property name="order" value="#{xmlViewResolver.order+1}" /> </bean> <bean id="secondaryResourceBundleResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="secondaryviews" /> <property name="order" value="#{resourceBundleResolver.order+1}" /> </bean> <bean id="internalResourceResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="order" value="#{secondaryResourceBundleResolver.order+1}" /> </bean>
5.2)视图和内容协商。
视图和内容协商在Spring MVC中也是作为解析器配置的。用来解决无扩展名的URL和多视图类型映射。ContentNegotiatingViewResolver与其他解析器集成配置如下:
<!-- Views mapped in views.properties (PDF, XLS classes, and others) --> <bean id="contentNegotiatingResolver" class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="order" value="#{T(org.springframework.core.Ordered).HIGHEST_PRECEDENCE}" /> <property name="mediaTypes"> <map> <entry key="html" value="text/html" /> <entry key="pdf" value="application/pdf" /> <entry key="xsl" value="application/vnd.ms-excel" /> <entry key="xml" value="application/xml" /> <entry key="json" value="application/json" /> </map> </property> </bean> <bean id="resourceBundleResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="views" /> <property name="order" value="#{contentNegotiatingResolver.order+1}" /> </bean> <bean id="secondaryResourceBundleResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="secondaryviews" /> <property name="order" value="#{resourceBundleResolver.order+1}" /> </bean> <bean id="internalResourceResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="order" value="#{secondaryResourceBundleResolver.order+1}" /> </bean>
ContentNegotiatingViewResolver解析器得到了最高的优先级用来确定URL请求类型。然后依次从高到低的优先级顺序来解析需要返回的视图,第一个匹配的视图返回。还可以找这个解析器内部配置其他解析器和默认视图:
<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml --> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <!-- 设置为true以忽略对Accept Header的支持 --> <property name="ignoreAcceptHeader" value="true" /> <!-- 在没有扩展名时即: "/blog/1" 时的默认展现形式 --> <property name="defaultContentType" value="text/html" /> <!-- 扩展名至mimeType的映射,即 /blog.json => application/json --> <property name="mediaTypes"> <map> <entry key="html" value="text/html" /> <entry key="pdf" value="application/pdf" /> <entry key="xsl" value="application/vnd.ms-excel" /> <entry key="xml" value="application/xml" /> <entry key="json" value="application/json" /> </map> </property> <!-- 用于开启 /blog/123?format=json 的支持 --> <property name="favorParameter" value="false" /> <property name="viewResolvers"> <list> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/pages" /> <property name="suffix" value=".jsp"></property> </bean> </list> </property> <property name="defaultViews"> <list> <!-- for application/json --> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> </list> </property> </bean>
参考:
juyon的blog:《spring3 MVC国际化支持之中文乱码》
Gary Mark等的书籍:《Spring Recipes》2ed
相关推荐
Spring MVC--5.视图和视图解析器
理解视图和视图解析器的解析流程、使用常用的InternalResourceView和JstlView、实现自定义视图、实现重定向操作
Spring配置Freemarker视图解析器,配置多个视图解析器
整合velocity和jsp 通过不同视图解析器,返回不同视图
基于实验1创建的汽车用品网上商城数据库Shopping,理解视图和索引的概念和作用,练习视图的基本操作,包括视图的建立,视图的查询,视图的更新,视图的删除,体会视图带来的方便;练习索引的创建和删除,对比有索引...
视图工具视图工具视图工具视图工具视图工具视图工具视图工具视图工具视图工具
这是滚动视图与列表视图的共存效果源码,我们知道滚动视图与列表视图共存会存在滚动的问题,并且列表视图只显示一个半选项。 只要当列表视图的高度设定一定的值时,列表视图同样地会显示对应的高度的选项。 因此我们...
索引和视图的创建和修改
月视图和周视图切换控件来舒适的调节编制文件
③ 在查询分析器中用SQL语句来创建视图View3和视图View4,视图View3的要求与View1相同,视图View4与视图View2的条件相同。 2、数据控制实验 ① 假定系统有U1、U2、U3 、U4、U5、U6六个登录用户,试将查询图书表的...
【例1】创建ccj视图,包括计算机专业各学生的...【例3】创建视图ccj_avg_t5,显示计算机专业平均成绩前5名的学生,包括学号(在视图中列名为num)、姓名(在视图中列名为name)和平均成绩(在视图中列名为score_avg)。
如果你要创建一个视图,为其指定一个名称和查询即可。Sql Server只保存视图的元数据,用户描述这个对象,以及它所包含的列,安全,依赖等。当你查询视图时,无论是获取数据还是更新数据,Sql server都用视图的定义...
QQ的视图视图、列表视图、网格视图和滚动视图。越界
是一个按钮切换两个控制器的demo,两个控制器之间可以自定义
使学生掌握 SQL Server中的视图创建及删除的方法,加深对视图和SQL Server图表作用的理解。 本实验需要1学时。 二、实验内容 1. 启动数据库服务软件SQL Server 2000的查询分析器,用CREATE VIEW语句建立视图,语法...
通过视图的设计和定义,掌握建立视图的基本方法,包括通过单张表建立视图和通过多张表建立视图,通过在定义的视图上进行查询,删除,更新,插入操作,理解视图的概念,掌握简单的视图查询方法。 3. 实验预备知识 在...
视图和索引的创建和使用实验报告.pdf
详细的介绍mfc树视图与列表视图的创建与用法,方便初学者学习
基于实验一建立的“图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL ...③ 在查询分析器中用SQL语句来创建视图View3和视图View4,视图View3的要求与View1相同,视图View4与视图View2的条件相同。
对话框,视图 对话框,视图 对话框,视图