[spring] springMVC jsp和Freemarker 多视图解析器配置
二、Spring MVC视图解析器
视图解析器的工作流程大致是这样的:
- Controller的某个方法执行完成以后,返回一个视图(比如:listUser)
- 视图解析器要做的工作就是找到某个对象来完成视图的渲染,或者跳转到其他的逻辑视图。这里的渲染对象通常就是我们的jsp文件或者我们下面用的Freemarker(例如listUser.jsp或者listUser.ftl)。
- 渲染完成以后,将解析结果发送到客户端浏览器
下面介绍一下本文需要用到的解析器(更多解析器资料):
- InternalResourceViewResolver:这是一个最常用的解析器。通常使用它指定渲染对象为jsp页面
- FreeMarkerViewResolver:这就是Spring与Freemarker整合需要用到的解析器
三、配置多视图,支持freemarker
我们通常不希望所有的动态页面请求都使用Freemarker来渲染,那就需要配置多个视图解析器。
<!--Freemarker配置--> <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="order" value="0" /> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> <property name="suffix" value=".ftl"/> <property name="cache" value="false"/> <property name="contentType" value="text/html;charset=UTF-8"/> <property name="exposeSessionAttributes" value="true"/> <property name="exposeRequestAttributes" value="true"/> <property name="exposeSpringMacroHelpers" value="true"/> </bean> <bean id="xmlEscape" class="freemarker.template.utility.XmlEscape" /> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="defaultEncoding" value="UTF-8"/> <property name="templateLoaderPath" value="/WEB-INF/ftl/"/> <property name="freemarkerSettings" > <props> <prop key="template_update_delay">10</prop> <prop key="defaultEncoding">UTF-8</prop> <prop key="url_escaping_charset">UTF-8</prop> <prop key="locale">zh_CN</prop> <prop key="boolean_format">true,false</prop> <prop key="time_format">HH:mm:ss</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="date_format">yyyy-MM-dd</prop> <prop key="number_format">#.##</prop> <prop key="whitespace_stripping">true</prop> </props> </property> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="xmlEscape"></entry> </map> </property> </bean> <!-- 视图解析器链 当定义多个视图解析器的时候,就会形成视图解析器链。当controller返回一个视图名称的时候,会在视图解析器链上按照排序顺序进行处理。 每个视图解析器都实现了ordered接口,数值越小就越靠前,默认都是最大值,order属性时Integer类型 注意:像InternalResourceViewResolver这种能解析所有的视图,即永远能返回一个非空View对象的ViewResolver一定要把它放在ViewResolver链的最后面 --> <!--jsp视图配置--> <bean id="InternalResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="order" value="1" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" /> </bean>
创建controller:
@Controller public class CommonController { private Logger logger = Logger.getLogger(this.getClass()); @RequestMapping("/index") public String toIndex(){ return "common/index"; } @RequestMapping("/ftl") public String toFtl(Model model,ModelMap modelMap){ model.addAttribute("title","Freemarker"); model.addAttribute("name","我去"); return "Hello"; }
Hello.ftl:
<html> <head> <title>Hello,${title}</title> </head> <body> <h1>你好,${name}</h1> </body> </html>
项目结构:

整合过程中遇到的异常:

浙公网安备 33010602011771号