springmvc html與jsp解析器

1. 配置多個視圖解析器html

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

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

解決方案web

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

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

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

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

<!-- 視圖解析器,能夠根據不一樣的請求配置不一樣的響應路徑 -->
<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視圖解析器jsp

html頁面須要freemark解析ui

 

<!-- <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,可能出現以下異常:spa

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依賴包)

相關文章
相關標籤/搜索