首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 多視圖解析器配置實戰:JSP、Velocity、FreeMarker、Tiles 共存

     編輯:Java 綜合教學

核心配置原理

Spring MVC 通過配置多個 ViewResolver 並設置 order 優先級,實現多視圖技術共存。關鍵規則:order 值越小優先級越高,JSP 解析器必須放最後(order 最大),否則會攔截所有請求導致其他模板 404。

完整 XML 配置示例

<!-- Velocity 視圖解析器 -->
<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
    <property name="order" value="0" />
    <property name="contentType" value="text/html;charset=UTF-8" />
    <property name="requestContextAttribute" value="req"/>
</bean>

<!-- Velocity 配置器 -->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <property name="configLocation" value="/WEB-INF/velocity.properties"/>
    <property name="resourceLoaderPath" value="/" />
</bean>

<!-- FreeMarker 視圖解析器 -->
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="order" value="1" />
    <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
</bean>

<!-- FreeMarker 配置器 -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="configLocation" value="/WEB-INF/freemarker.properties"/>
    <property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
    <property name="freemarkerVariables">
        <map>
            <entry key="xml_escape" value-ref="fmXmlEscape"/>
        </map>
    </property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>

<!-- Tiles 3 視圖解析器 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
    <property name="order" value="2" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>classpath:layout.xml</value>
        </list>
    </property>
</bean>

<!-- JSP 視圖解析器(必須最後) -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
    <property name="order" value="3" />
</bean>

關鍵點解析

  1. Order 排序:0 > 1 > 2 > 3,按順序嘗試解析,首個匹配成功即返回
  2. JSP 陷阱:InternalResourceViewResolver 會嘗試解析所有路徑,若放在前面會導致 Velocity/FreeMarker/Tiles 永無匹配機會
  3. 替代方案:自定義 ViewResolver 實現更精確的路徑匹配邏輯

最佳實踐建議

  • 統一規範視圖命名前綴(如 vm:、ftl:、tiles:)避免衝突
  • 生產環境建議僅保留 1-2 種視圖技術,降低維護複雜度
  • 使用 ContentNegotiatingViewResolver 實現基於 Accept Header 的自動視圖選擇
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved