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