1. 配置多个视图解析器
InternalResourceViewResolver内置了jsp解析器,用于解析jsp页面
此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View;所以呢View永远不为null(即使该jsp不存在);问题就是出在这;因为我们使用这个的时候默认是使用servlet forward转发的,此时并不知道该jsp是否存在。
解决方案
最简单的办法是使用其viewNames属性,来指定一个是否可以处理的规则
如上两个的意思是对weixin或base开头的视图名进行处理,比如返回的视图名为weixin/a 那么会交给viewNames为weixin*的那个解析器处理;支持的规则可以查看javadoc。
如何调用?
return new ModelAndView("redirect:weixin/index.jsp");// 走的是第一个视图解析器
return new ModelAndView("redirect:base/login.jsp");// 先判断第一个,不是以weixin开头的,再走第二个视图解析器,符合要求
2. 配置HTML视图解析器
html页面需要freemark解析
/WEB-INF/views/
运行tomcat,可能出现如下异常:
Caused by: java.lang.ClassNotFoundException: org.springframework.ui.freemarker.FreeMarkerConfigurationFactory
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)
导入依赖包:
org.springframework
spring-context-support
4.3.13.RELEASE
仍可能出现如下异常:
Caused by: java.lang.ClassNotFoundException: freemarker.cache.TemplateLoader
导入依赖包:
org.freemarker
freemarker
2.3.23
还可能出现如下异常:
Caused by: java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
这种异常一般是由freemark依赖包版本导致,可通过变更freemark版本解决(一般使用较高版本的freemark依赖包)