spring MVC 配置多视图模块,多输出格式

springmvc可能要配置多个视图模式,比方说需求要求有jsp和freemarker2种输出文件格式。freemarker可以自己定制

xml|json|html等。

面对这样的需求,显然单纯的mvc的jsp视图模板是不够的,所以需要spring对freemarker进行支持。

对于这样的问题,有多种解决方案,就我用过的2中说说吧:

1:使用org.springframework.web.servlet.view.ResourceBundleViewResolver

直接上代码:

<!--配置一个ResourceBundleViewResolver 配置一个spring-views.properites 文件(必须在根目录) 加载的顺序是最优先 

"order = 0" -->
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
	<property name="basename" value="spring-views" />
	<property name="order" value="0" />
</bean>

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">           

 <property name="templateLoaderPath">
	      <value>/WEB-INF/views/modules</value>
	</property>
</bean>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/"/>
	<property name="suffix" value=".jsp"/>
</bean>

spring-views.properties:

articles.(class)=org.springframework.web.servlet.view.JstlView
articles.url=articles.jsp

module-content-articles.(class)=org.springframework.web.servlet.view.freemarker.FreeMarkerView
module-content-articles.url=modules/content/html/articles.ftl

这里的class指定的是解析的视图类,url指定的是视图页面。

Controller类中请求方式:

return "module-content-articles";

我用的是另一种配置多视图的方式:

<!--
	<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
		<property name="basename" value="spring-views" />
		<property name="order" value="0" />
	</bean>-->

	<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	    <property name="templateLoaderPath">
	        <value>/WEB-INF/views/modules</value>
	    </property>
	</bean>
	
	<bean id="xmlviewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".xml.ftl" />
        <property name="contentType" value="text/xml;charset=UTF-8"></property>
    </bean>
    
    <bean id="htmlviewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html.ftl" />
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean>
    
    <bean id="jsonviewResolver"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".json.ftl" />
        <property name="contentType" value="application/text;charset=UTF-8"></property>
    </bean>

	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"/>
		<property name="suffix" value=".jsp"/>
	</bean>

这样就没有使用org.springframework.web.servlet.view.ResourceBundleViewResolver了,这样的话spring-views.properties文

件就没有存在的意义了。

Controller类:

return "content/"+format+"/articles";

目录结构

相关推荐