读书人

2、SpringMVC和FreeMarker集成

发布时间: 2013-11-06 16:26:37 作者: rapoo

二、SpringMVC和FreeMarker集成
一、SpringMVC和JSP集成
二、SpringMVC和FreeMarker集成

和一、SpringMVC和JSP集成类似,改动的地方:

1. 在pom.xml文件中添加FreeMarker依赖:

  <properties>    <freemarker.version>2.3.19</freemarker.version>  </properties>  <dependencies>    <dependency>        <groupId>org.freemarker</groupId>        <artifactId>freemarker</artifactId>        <version>${freemarker.version}</version>    </dependency>  </dependencies>


2. web.xml文件,SpringMVC配置文件改为mvc-ftl.xml:
    <init-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/mvc-ftl.xml</param-value>    </init-param>


mvc-ftl.xml,

①. 使用SpringMVC自带的FreeMarker视图解析器FreeMarkerViewResolver
②. 有且只有一个FreeMarkerConfig的bean定义,否则会抛异常。在SpringMVC中,FreeMarkerConfig的实现是FreeMarkerConfigurer
③. 和JSP在prefix属性中指定文件存放路径不同,FreeMarker在templateLoaderPaths属性中指定。

<!-- FreeMarker view resolver --><bean id="viewResolverFtl" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>    <property name="contentType" value="text/html;charset=utf-8"/>    <property name="prefix" value="he" />    <property name="cache" value="false"/>    <property name="viewNames">        <array>            <value>*.ftl</value>        </array>    </property>    <!--<property name="suffix" value=".ftl"/>-->    <property name="order" value="0"/><!-- 优先级,数值越小优先级越高 --></bean><bean id="freemarkerConfig" />


3. WithFtlController类
public class WithFtlController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView("llo.ftl");mv.addObject("msg", "Hello Freemarker!");return mv;}}


4. 在/WEB-INF/ftl目录下新建hello.ftl文件
<html><head><title>Freemarker</title></head><body>${msg}</body></html>


5. 运行/调试工程,请求http://localhost:8080/chapter5/ftl.htm,页面输出:
Hello Freemarker!

附:
在FreeMarkerViewResolver的buildView方法中,组装视图的URL:



protected AbstractUrlBasedView buildView(String viewName) throws Exception {    AbstractUrlBasedView view = (AbstractUrlBasedView) BeanUtils.instantiateClass(getViewClass());    view.setUrl(getPrefix() + viewName + getSuffix()); // he + llo.ftl + "" => hello.ftl    String contentType = getContentType();    if (contentType != null) {        view.setContentType(contentType);    }    view.setRequestContextAttribute(getRequestContextAttribute());    view.setAttributesMap(getAttributesMap());    if (this.exposePathVariables != null) {        view.setExposePathVariables(exposePathVariables);    }    return view;}

读书人网 >VC/MFC

热点推荐