`
yidwo
  • 浏览: 261707 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring3.2.3 MVC多视图解析实例

阅读更多
这个架构当中,没有整合进数据库连接及事务管理等的配置,单纯介绍采用ContentNegotiatingViewResolver来做视图解析的一个配置实例,其它的一些配置,相信也难不倒各位亲。源代码实例见附件。
好了,我们接下来将按
项目构建-->配置文件-->后端实现-->前端实现 来讲解。下面先从构建项目开始


采用Gradle做项目构建
这里只描述一些基本的要用到的构建语法,基础的应用是很简单的。
1. 命令行下进入项目的根目录,即build.gradle配置文件所在的目录。
2. 执行命令:gradle eclipse  自动下载build.gradle配置中的依赖包并生成eclipse的环境配置文件如:.project等等。
3. 上步完成后,在eclipse导入现成项目即可。
如果您想进一步了解gradle,可访问博文:http://yidwo.iteye.com/blog/1848990
或访问其官方网站:http://gradle.org


Spring MVC的配置
web.xml:
<!-- Spring Web Dispatcher Configuration -->
	<servlet>
		<servlet-name>Dispatcher Servlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
                /WEB-INF/spring-web.xml
            </param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>Dispatcher Servlet</servlet-name>
		<url-pattern>/do/*</url-pattern>
</servlet-mapping>


重点标注url-pattern部分,url的请求匹配,只要是满足的,都会被Spring mvc 适匹器捕获并处理。
mvc的配置
下面只是列出了主要的ContentNegotiatingViewResolver的相关配置:
<bean
		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<property name="order" value="1" />
		<property name="favorParameter" value="false" />
		<property name="ignoreAcceptHeader" value="true" />

		<property name="defaultContentType" value="application/json" />

		<property name="mediaTypes">
			<map>
				<entry key="atom" value="application/atom+xml" />
				<entry key="html" value="text/html" /><!-- 真正静态页面,使用htm后缀(文件格式) -->
				<entry key="json" value="application/json" />
				<entry key="xml" value="application/xml" />
			</map>
		</property>
		<property name="viewResolvers">
			<list>
				<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
				<!-- 页面请求时先找此配置,无的话再找jsp的视图配置 -->
				<bean
					class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
					<property name="cache" value="true" />
					<property name="prefix" value="" />
					<property name="suffix" value=".ftl" />
					<property name="exposeSpringMacroHelpers" value="true" />
					<property name="exposeRequestAttributes" value="true" />
					<property name="exposeSessionAttributes" value="true" />
					<property name="contentType" value="text/html;charset=UTF-8" />
				</bean>
	<!-- 
				<bean
					class="org.springframework.web.servlet.view.InternalResourceViewResolver">
					<property name="viewClass"	value="org.springframework.web.servlet.view.JstlView" />
					<property name="prefix" value="/WEB-INF/jsp/" />
					<property name="suffix" value=".jsp" />
				</bean>
			-->
				<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
					<property name="prefix" value="/WEB-INF/jsp/" /> 
					<property name="suffix" value=".jsp" /> 
				</bean> 
			</list>
		</property>
		<!-- view 接口 下的视图解析对象 -->
		<property name="defaultViews">
			<list>
				<bean
					class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
				<!-- <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" 
					/> -->
				<!-- XML View -->
				<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
					<constructor-arg>
						<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
							<property name="packagesToScan">
								<list>
									<value>com.sample.model</value>
								</list>
							</property>
						</bean>
					</constructor-arg>
				</bean>
			</list>
		</property>
	</bean>

默认视图配置为json格式
<property name="defaultContentType" value="application/json" />

这么做是因为现今Ajax技术用得比较多。
查看spring-web.xml配置,里面有较详细的注释。

后端REST注解实现
后端的实现实例详见SimpleController.java

text/html
需要mediaType为text/html 的数据时,采用*.htm的uri请求,如:/do/sample.html请求sample.ftl页面或是sample.jsp页面,因为ftl的视图解析配置在jsp的视图解析之前,所以会先查找Freemarker的目录,没发现的话,则会继续查找jsp的目录。

application/json
因为默认配置数据格式为json,所以需要josn格式的数据时,uri可以不加后缀。以下json的请求都是有效的 /do/sample  和  /do/sample.json  请求处理完成后,直接返回客户端需要的数据对象,spring 会自动调用jackson组件将其转换成json格式。不用加 @ResponseBody注解,是不是更清爽呀。

application/xml
配置采用JAXB做为xml数据的转换组件,只需要在javabean对象的getter方法上加上xml相关注解(详见TestModel.java),在返回该对象及其包装对象时Spring自动转换成xml格式文档。

前端实现
由于我们在web.xml配置文件的url-pattern配置了/do/*. 所以在Controller的注解uri前面需要加上”/do”.
更详细的实现见index.jsp


参考:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-multiple-representations
2
2
分享到:
评论
6 楼 hackpro 2013-07-22  
兄弟,不好意思,是我言重了.测试的时候,气急账坏.度娘的答案也是千篇一律..
所以~~.抱赚啊..


yidwo 写道
hackpro 写道
Caused by:
java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.http.MediaType


不过我附件里的工程运行是没有出这些问题的,不知你有没用我附件代码,然后用gradle eclipse命令下载依赖包和构建Eclipse开发环境。如果你是自己加依赖包,应该是包的问题,spring包用的是3.2.3版本的,jackson用的是2.X版本。

这附件是采用Spring和mvc做项目架构时做的一个DEMO, 现在这个配置已经应用到我的项目上去了,开发效率很高。做压测时也没出现这些问题。

5 楼 yidwo 2013-07-21  
hackpro 写道
Caused by:
java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.http.MediaType


不过我附件里的工程运行是没有出这些问题的,不知你有没用我附件代码,然后用gradle eclipse命令下载依赖包和构建Eclipse开发环境。如果你是自己加依赖包,应该是包的问题,spring包用的是3.2.3版本的,jackson用的是2.X版本。

这附件是采用Spring和mvc做项目架构时做的一个DEMO, 现在这个配置已经应用到我的项目上去了,开发效率很高。做压测时也没出现这些问题。
4 楼 hackpro 2013-07-19  
Caused by:
java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.http.MediaType
3 楼 hackpro 2013-07-19  
3.2 需要这样配置

<property name="defaultContentType" value="application/xml" /> 
		<property name="order" value="1" />     
		<property name="contentNegotiationManager">     
			<bean class="org.springframework.web.accept.ContentNegotiationManager">         
				<constructor-arg>             
					<bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">             
						<constructor-arg>                 
							<map>                     
								<entry key="htm" value="text/html;charset=utf-8"/>                     
								<entry key="json" value="application/json;charset=utf-8"/>                     
								<entry key="xml" value="application/xml;charset=utf-8"/>                 
							</map>             
						</constructor-arg>             
					</bean>         
				</constructor-arg>     
			</bean>     
		</property> 
2 楼 yidwo 2013-07-19  
hackpro 写道
误人子弟
<property name="mediaTypes">   你的这总配置不审3.1的写法

这配置有什么不对或者不好的地方。可否简单描述一下。
 上面和附件里的配置是有参考spring3.2.2官方文档配置的。
你也可以参考看下:
http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-multiple-representations
1 楼 hackpro 2013-07-18  
误人子弟
<property name="mediaTypes">   你的这总配置不审3.1的写法

相关推荐

    Jersey2.13+spring3.2.3入门实例

    ** Jersey2.13 + Spring3.2.3入门实例详解** 本文将深入探讨如何结合Jersey 2.13和Spring 3.2.3框架构建一个入门级的Web服务应用。首先,我们来了解这两个关键组件的核心功能。 **Jersey** 是Java语言中最流行的...

    Spring3.2.3基础类包

    7. **Spring MVC**:Spring的Web MVC框架简化了构建Web应用程序的过程,它提供了Model、View和Controller的分离,使得开发者可以更专注于业务逻辑的实现,而不用关心视图的呈现和请求的处理。 8. **Maven或Gradle...

    Struts2 2.3.15 + Hibernate 3.x.x + Spring 3.2.3整合JAR包

    Struts2、Hibernate和Spring(通常简称为SSH)是Java Web开发中的三个核心框架,分别用于处理MVC(模型-视图-控制器)架构、对象关系映射(ORM)和依赖注入(DI)。将这三个框架整合在一起,可以构建出高效、可维护...

    spring3.2 源码 jar包

    5. **MVC框架**:Spring MVC是Spring提供的Web开发框架,提供了模型-视图-控制器模式的实现,帮助开发者构建高性能、松耦合的Web应用。 6. **消息支持**:Spring框架包含Spring Messaging模块,提供对消息传递系统...

    Struts2.1.8+Spring2.5.6+hibernate3.2.3整合

    Struts2、Spring和Hibernate是Java Web开发中的三大...Struts2负责请求调度和视图渲染,Spring管理应用的组件和事务,而Hibernate则负责数据持久化。这样的架构既保证了开发效率,也提高了系统的可扩展性和可维护性。

    Spring3Hibernate4整合jar包

    Spring 是一个轻量级的全面应用程序框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及大量的集成工具。而 Hibernate 则是一个 ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以...

    (二)struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 集成jquery-ui-1.10.3

    Struts2、Spring和MyBatis是Java Web开发中三个重要的框架,它们分别负责MVC模式中的Action层、业务逻辑层和服务数据访问层。而jQuery UI则是一个前端库,提供了丰富的用户界面组件,如对话框、日期选择器、拖放功能...

    struts2- 2.3.15.3 spring3.2.4 mybatis-3.2.3 通用分页(不同数据库) 拦截器

    Struts2、Spring3.2.4和MyBatis3.2.3是Java开发中的三个核心框架,它们各自承担着不同的职责,并且可以协同工作,构建高效的企业级应用。这个压缩包文件的标题和描述暗示了它们在实现通用分页功能时的应用,特别是...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.5.3.1. RedirectView 13.5.3.2. redirect:前缀 13.5.3.3. forward:前缀 13.6. 本地化解析器 13.6.1. ...

    Spring 2.0 开发参考手册

    13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2. CookieLocaleResolver 13.6.3. ...

    Spring.3.x企业应用开发实战(完整版).part2

    10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼...

    Spring中文帮助文档

    13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2. ...

    spring chm文档

    13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2. CookieLocaleResolver 13.6.3. ...

    Spring API

    13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2. ...

    Spring3.x企业应用开发实战(完整版) part1

    10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼...

    Spring5.0中文开发手册

    - **1.2.2.5 Web**:提供了构建Web应用程序的所有功能,包括MVC控制器、视图解析器、表单标签库等。 - **1.2.2.6 Test**:提供支持测试Spring组件的JUnit和TestNG集成。 - **1.2.3 Usage Scenarios 使用场景** ...

    Spring攻略(第二版 中文高清版).part1

    1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 ...

    Spring攻略(第二版 中文高清版).part2

    1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 ...

    ssm的基本jar包

    4. **spring-webmvc-4.3.2.RELEASE.jar**:这是Spring MVC的部分,提供了一个模型-视图-控制器的Web应用架构。它负责处理HTTP请求,映射到相应的控制器方法,进行视图渲染,以及数据绑定和验证。 5. **spring-web-...

    Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程.pdf

    这三个框架分别承担着不同的角色,Struts2主要用于Web层的MVC设计,Spring是整个应用的基础,实现服务层的业务逻辑,Hibernate则是数据持久层的核心,负责与数据库交互。 **Eclipse搭建SSH框架项目的知识点如下:**...

Global site tag (gtag.js) - Google Analytics