`
kingxss
  • 浏览: 972994 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring3 MVC的最佳实践和理解(5)

阅读更多

个人学习参考所用,勿喷! 

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 jar包

    而`spring-framework-2.5.6-with-docs.zip`可能包含了Spring 2.5.6的源码和文档,帮助开发者了解Spring MVC的内部实现和最佳实践。 总之,这个压缩包提供了开发基于Spring MVC和Hibernate的Java Web应用所需要的...

    spring-mvc-showcase

    首先,"spring-mvc-showcase" 是 SpringSource 提供的一个示例应用,用于展示 Spring MVC 的各种特性和最佳实践。这个项目包含了一系列精心设计的示例,涵盖了从基本请求处理到复杂业务逻辑的多种场景,是学习 ...

    Spring3 MVC 深入研究

    **Spring3 MVC 深入研究*...通过深入理解其核心机制和最佳实践,开发者可以构建高效、可维护的Web应用。随着Spring框架的不断演进,如Spring Boot和Spring Cloud等,Spring3 MVC的理念和设计模式仍具有很高的参考价值。

    网上书城 spring-mvc

    《网上书城 Spring-MVC》项目是基于Spring-MVC框架构建的一个典型电子商务平台,它展示了如何使用Spring-MVC来实现高效、...开发者可以通过学习和实践这个项目,深入理解Spring-MVC的机制和最佳实践,提升Web开发能力。

    Maven构建Spring3mvc和Hibernate

    ** Maven构建Spring3 MVC与Hibernate整合详解 ** 在软件开发中,Maven是一个强大的...在实际开发中,还需要结合最佳实践和具体需求进行调整和优化。通过阅读博文链接中的内容,可以获取更具体的实现细节和示例代码。

    Spring4Spring-MVc.rar_mvc4_spring4_spring4 mvc_www.mvn3

    同时,模板中的最佳实践和常见配置示例可以帮助开发者理解和学习这些技术的使用方式。 在实际使用过程中,开发者可以按照以下步骤操作: 1. 解压"Spring4Spring-MVc.rar",得到项目目录结构。 2. 使用IDE导入Maven...

    廖雪峰 Spring 2.0 核心技术与最佳实践 高清扫描版

    《Spring 2.0 核心技术与最佳实践》是由知名IT教育家廖雪峰编写的教程,旨在为从初学者到高级工程师提供全面而深入的Spring 2.0框架理解与应用指导。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛使用...

    Spring.MVC学习指南.pdf

    以上是Spring MVC的基本知识点,这份学习指南可能会详细讲解这些内容,并提供实际案例和最佳实践,帮助读者从基础到高级全面掌握Spring MVC。通过深入学习,开发者能够更好地构建高效、可扩展的Web应用。

    Spring3MVC+ajax

    在Web应用开发中,Spring3 MVC框架和Ajax技术的结合使用能够极大地提升用户体验,实现页面的无刷新更新。本文将深入探讨如何在Spring3 MVC项目中集成Ajax,以便更好地理解这两者的协同工作原理。 **一、Spring3 MVC...

    Java EE企业级应用开发教程(Spring Spring MVC MyBatis)(黑马程序员编著)

    通过学习本书,开发者不仅可以掌握Java EE开发的基本技能,还能深入理解Spring、Spring MVC和MyBatis这三个框架的原理和最佳实践。这将有助于他们在实际工作中构建出更加高效、可扩展的后端应用,同时也能提升团队...

    Mastering Spring Webmvc

    《精通Spring Web MVC》 Spring Web MVC是Spring框架的核心组件之一,它为构建基于Java的Web应用程序提供了模型-...通过阅读《Mastering Spring Webmvc》及参考博文,可以深入理解Spring MVC的内部机制和最佳实践。

    Spring核心技术与最佳实践

    通过深入理解Spring的核心技术和最佳实践,开发者可以创建出高效、可维护的Web应用程序。在实际开发中,掌握HTTP协议原理、Servlet组件的使用以及Spring MVC的配置和编程模型,对于优化代码结构和提升开发效率至关...

    【面试资料】-(机构内训资料)看透Spring MVC源代码分析与实践.zip

    在面试中,对Spring MVC的深入理解和源代码分析能力通常被视为高级Java开发者的重要技能。这份【面试资料】-(机构内训资料)看透Spring MVC源代码分析与实践.zip文件很可能是为了帮助求职者准备相关面试问题而设计...

    spring mvc step by step,例子

    在实际应用中,我们还会涉及到一些高级特性和最佳实践,例如: - **AOP(面向切面编程)**:可以用来实现事务管理、日志记录等功能,通过定义切面和通知,将这些通用逻辑与业务代码解耦。 - **Spring Data JPA**:...

    Spring mvc整合mybatis例子

    在IT行业中,Spring MVC 和 MyBatis 是两个非常重要的框架,它们分别负责Web应用程序的控制器层和数据访问层。Spring MVC 提供了模型-视图-控制器架构模式的实现,而MyBatis则是一个轻量级的SQL映射框架,用于简化...

    最新Spring3 MVC 示例 demo程序

    这个"最新Spring3 MVC 示例 demo程序"旨在帮助开发者理解并掌握Spring 3的最新特性和最佳实践。 1. **Spring MVC基本架构** Spring MVC通过DispatcherServlet作为前端控制器,它负责接收HTTP请求,并根据请求信息...

    spring4-mvc-gradle

    《Spring4-MVC-Gradle:构建现代Java Web应用程序的基石》 在现代Web开发领域,Spring框架以其强大的功能和灵活性...通过深入研究这个项目,你可以掌握构建现代Web应用的关键技术和最佳实践,从而提升你的开发技能。

    spring-MVC搭建所需包(spring3.0)附带搭建源码

    - 开源项目:通过阅读和分析开源项目中的Spring MVC代码,可以学习到实际应用场景下的最佳实践。 总之,Spring MVC提供了一种强大且灵活的方式来构建Web应用程序,其注解驱动的特性极大地简化了开发流程。通过理解...

Global site tag (gtag.js) - Google Analytics