springmvc html與jsp解析器


1. 配置多個視圖解析器

InternalResourceViewResolver內置了jsp解析器,用於解析jsp頁面

此處我們使用了InternalResourceViewResolver,其有一個buildView方法,該方法一定會創建一個View;所以呢View永遠不為null(即使該jsp不存在);問題就是出在這;因為我們使用這個的時候默認是使用servlet forward轉發的,此時並不知道該jsp是否存在。

解決方案

最簡單的辦法是使用其viewNames屬性,來指定一個是否可以處理的規則

<property name="viewNames" value="weixin*"/>

<property name="viewNames" value="base*"/>

如上兩個的意思是對weixin或base開頭的視圖名進行處理,比如返回的視圖名為weixin/a 那么會交給viewNames為weixin*的那個解析器處理;支持的規則可以查看javadoc。

<!-- 視圖解析器,可以根據不同的請求配置不同的響應路徑 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewNames" value="weixin*"/>
    <property name="prefix" value="/" />
    <property name="suffix" value=".jsp" />
    <property name="order" value="0" />
</bean>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewNames" value="base*"/>
    <property name="prefix" value="/login/" />
    <property name="suffix" value=".jsp" />
    <property name="order" value="1" />
</bean>

如何調用?
return new ModelAndView("redirect:weixin/index.jsp");// 走的是第一個視圖解析器
return new ModelAndView("redirect:base/login.jsp");// 先判斷第一個,不是以weixin開頭的,再走第二個視圖解析器,符合要求

 

2. 配置HTML視圖解析器

html頁面需要freemark解析

 

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

 

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>/WEB-INF/views/</value>
        </property>
    </bean>
    <bean id="htmlviewResolver"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html" />
        <property name="order" value="0"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean>

 

運行tomcat,可能出現如下異常:

Caused by: java.lang.ClassNotFoundException: org.springframework.ui.freemarker.FreeMarkerConfigurationFactory
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)

導入依賴包:

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
        <version>4.3.13.RELEASE</version>
    </dependency>

 

仍可能出現如下異常:

Caused by: java.lang.ClassNotFoundException: freemarker.cache.TemplateLoader

導入依賴包:

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>

還可能出現如下異常:

Caused by: java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS

這種異常一般是由freemark依賴包版本導致,可通過變更freemark版本解決(一般使用較高版本的freemark依賴包)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM