`

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的写法

相关推荐

    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-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中文帮助文档

    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 特殊方法成漏网之鱼...

    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 ...

    JAVA程序开发大全---上半部分

    3.2.3 Java代码编辑器相关视图 50 3.3 MyEclipse中的Java代码编译器 51 3.4 MyEclipse中的Java代码调试器 52 3.4.1 Java项目的运行 52 3.4.2 Java项目的调试 53 3.5 MyEclipse中的Java代码搜索器 57 3.5.1 搜索功能 ...

    领域驱动设计与模式实战

    10.3.6 使用了Spring.NET框架的依赖注入 10.3.7 利用PicoContainer.NET进行自动装配 10.3.8 嵌套容器 10.3.9 服务定位器与依赖注入的比较 10.3.10 小结 10.4 面向方面编程 10.4.1 热门话题有哪些 10.4.2 AOP术语定义...

    JAVA核心知识点整理(有效)

    可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 ........................

Global site tag (gtag.js) - Google Analytics