您的位置:首页 > 编程语言 > Java开发

Spring3.2.3 MVC多视图解析实例

2014-06-29 23:14 471 查看
这个架构当中,没有整合进数据库连接及事务管理等的配置,单纯介绍采用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: 

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的相关配置: 

Xml代码  


<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格式 

Xml代码  


<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

smvc.tar.gz (241.8 KB)
下载次数: 306
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: