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