FreeMarker集成

FreeMarker集成

在Servlet中使用FreeMarker

简单的使用方式是,在Servlet中直接处理模板与数据模型,然后输出到响应中

如下的一个TestServlet
Configuration对象使用setServletContextForTemplateLoading方法,设置要加载模板的servlet上下文

@WebServlet(name="test", urlPatterns="/test")
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private Configuration cfg;
    @Override
    public void init() throws ServletException {
        cfg = new Configuration(Configuration.VERSION_2_3_26);
        cfg.setServletContextForTemplateLoading(getServletContext(), "/WEB-INF/ftl");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Map root = new HashMap();
        root.put("name", "小明");
        root.put("names", Arrays.asList("Tom", "John", "Sasha"));

        Template template = cfg.getTemplate("index.ftl");

        response.setCharacterEncoding("UTF-8");
        Writer writer = response.getWriter();
        try {
            template.process(root, writer);
        } catch (TemplateException e) {
            e.printStackTrace();
        }
    }

}

原来中Servlet中,如果转发到一个页面,之前使用jsp的时候,是交由Servlet容器来进行处理的。如果现在转到ftl,容器当然是不能解析的。
但此时在web.xml中做一个配置,将以.ftl结尾的请求交给一个特定的Servlet来处理,这样达到将视图交给FreeMarker来处理

如下的Servlet,数据保存在request中,页面转到了一个模板中

@WebServlet(name="test2", urlPatterns="/test2")
public class TestServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("name", "小明");
        request.setAttribute("names", Arrays.asList("Tom", "John", "Sasha"));
        request.getRequestDispatcher("index.ftl").forward(request, response);
    }

}

web.xml中内容如下:

    <servlet>
        <servlet-name>freemarker</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <!-- 指定ftl路径 -->
            <param-name>TemplatePath</param-name>
            <param-value>/WEB-INF/ftl</param-value>
        </init-param>
        <init-param>
            <param-name>ContentType</param-name>
            <param-value>text/html;charset=UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>default_encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>freemarker</servlet-name>
        <url-pattern>*.ftl</url-pattern>
    </servlet-mapping>

Struts2集成FreeMarker

Struts2默认的模板技术就是FreeMarker,只需配置resulttype="freemarker"即可

如下,创建一个TestAction,在其execute()方法中设置了一些属性的值,在ftl中获取这些值:

public class TestAction {
    private String name;
    private List<String> names;

    public String execute()
    {
        name = "小王";
        names = Arrays.asList("Tom", "小红", "John");
        return "test";
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<String> getNames() {
        return names;
    }
    public void setNames(List<String> names) {
        this.names = names;
    }

}

struts.xml中的配置文件中,设置resulttypefreemarker即可

    <package name="freemarker" extends="struts-default">
        <action name="test" class="com.wz.action.TestAction">
            <result type="freemarker" name="test">/WEB-INF/ftl/index.ftl</result>
        </action>
    </package>

Freemarker 与SpringMVC集成

如下的一个TestController,添加数据,返回页面

@Controller
public class TestController {

    @RequestMapping("test")
    public String test(Model model)
    {
        model.addAttribute("name", "小王");
        model.addAttribute("names", Arrays.asList("Tom", "Josn", "Aya"));
        return "index";
    }
}

最主要在SpringMVC的配置文件中配置2个bean
1.一个是模板的配置
2.一个是视图解析器

    <mvc:annotation-driven></mvc:annotation-driven>
    <mvc:default-servlet-handler/>
    <context:component-scan base-package="com.wz"></context:component-scan>

    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!-- 模板的位置 -->
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <!-- 设置默认的编码 -->
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!-- 后缀 -->
        <property name="suffix" value=".ftl" />
        <property name="contentType" value="text/html;charset=UTF-8"/>
    </bean>

也可参考SpringMVC搭配Freemarker实例解析,直接指定后缀为html

<property name="suffix" value=".html"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值