一、最原始示例

1、引入POM依赖

  1. <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
  2. <dependency>
  3. <groupId>org.freemarker</groupId>
  4. <artifactId>freemarker</artifactId>
  5. <version>2.3.26-incubating</version>
  6. </dependency>
  7.  
  8. <!-- Servlet Library -->
  9. <!-- http://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
  10. <dependency>
  11. <groupId>javax.servlet</groupId>
  12. <artifactId>javax.servlet-api</artifactId>
  13. <version>3.1.0</version>
  14. <scope>provided</scope>
  15. </dependency>

2、在WEB-INF/ftl中建立test.ftl

  1. <html>
  2. <head>
  3. <title>Welcome!</title>
  4. </head>
  5. <body>
  6. <h1>
  7. Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!
  8. </h1>
  9. </body>
  10. </html>

3、添加TestServlet.java

  1. package com.jsoft.testfreemarker;
  2.  
  3. import java.io.IOException;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6.  
  7. import javax.servlet.ServletException;
  8. import javax.servlet.annotation.WebServlet;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12.  
  13. import freemarker.template.Configuration;
  14. import freemarker.template.Template;
  15.  
  16. /**
  17. * Servlet implementation class TestServlet
  18. */
  19. @WebServlet(name = "test", urlPatterns = "/test")
  20. public class TestServlet extends HttpServlet {
  21. private static final long serialVersionUID = 1L;
  22.  
  23. private Configuration cfg;
  24. @Override
  25. public void init() throws ServletException {
  26. // initialize operation
  27. cfg = new Configuration(Configuration.VERSION_2_3_26);
  28. cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/ftl");
  29. }
  30. /**
  31. * Default constructor.
  32. */
  33. public TestServlet() {
  34. // TODO Auto-generated constructor stub
  35. }
  36.  
  37. /**
  38. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  39. * response)
  40. */
  41. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  42. throws ServletException, IOException {
  43. response.setCharacterEncoding("utf-8");
  44. Map<String, Object> data = new HashMap<String, Object>();
  45. data.put("user", "Big Joe");
  46. // 得到模板
  47. try {
  48. // 将模板和数据结合,并返回浏览器
  49. Template template = cfg.getTemplate("test.ftl");
  50. template.process(data, response.getWriter());
  51. } catch (Exception e) {
  52. // e.printStackTrace();
  53. response.getWriter().print("暂时无数据");
  54. }
  55. }
  56.  
  57. /**
  58. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  59. * response)
  60. */
  61. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  62. throws ServletException, IOException {
  63. // TODO Auto-generated method stub
  64. doGet(request, response);
  65. }
  66.  
  67. }

提示:采用了Servlet3.x的注解功能,不需要在web.xml中再配置映射。

4、测试效果

测试工程:https://github.com/easonjim/5_java_example/tree/master/freemarker/test2

二、高级一点的集成

1、在web.xml引入FreeMarker提供的Servlet

  1. <servlet>
  2. <servlet-name>freemarker</servlet-name>
  3. <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  4. <init-param>
  5. <param-name>TemplatePath</param-name>
  6. <param-value>/</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>NoCache</param-name>
  10. <param-value>true</param-value>
  11. </init-param>
  12. <init-param>
  13. <param-name>ContentType</param-name>
  14. <param-value>text/html;charset=UTF-8</param-value>
  15. </init-param>
  16. <init-param>
  17. <param-name>template_update_delay</param-name>
  18. <param-value>0</param-value>
  19. </init-param>
  20. <init-param>
  21. <param-name>default_encoding</param-name>
  22. <param-value>UTF-8</param-value>
  23. </init-param>
  24. <init-param>
  25. <param-name>number_format</param-name>
  26. <param-value>0.##########</param-value>
  27. </init-param>
  28. </servlet>
  29. <servlet-mapping>
  30. <servlet-name>freemarker</servlet-name>
  31. <url-pattern>*.ftl</url-pattern>
  32. </servlet-mapping>

2、新建test.ftl模板文件

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
  3. <head>
  4. <title>test!</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  6. </head>
  7. <body>
  8. <div>
  9. 直接显示字符串<br />
  10. String:${strValue}<br/>
  11. <hr/>
  12. </div>
  13.  
  14. <div>
  15. 显示日期
  16. date:${myDate?date}<br/>
  17. <hr/>
  18. 显示时间
  19. time:${myDate?time}<br/>
  20. <hr/>
  21. 显示时间戳
  22. datetime:${myDate?datetime}<br/>
  23. <hr/>
  24. </div>
  25.  
  26. <div>
  27. 访问对象数组
  28. ObjectArray:
  29. ${objectArray[0]},${objectArray[1]},${objectArray[2]}
  30. <br />
  31. <hr/>
  32. </div>
  33.  
  34. <div>
  35. 遍历Set中的元素
  36. SetData:<br />
  37. <#list setData as value>
  38. ${value}
  39. </#list>
  40. <hr/>
  41. </div>
  42.  
  43. <div>
  44. 遍历List中的元素
  45. strList:<br/>
  46. <#list strList as strValue >
  47. <#if strValue_index == >
  48. ${strValue} is first element
  49. <#elseif !strValue_has_next>
  50. ${strValue} is last element
  51. <#else>
  52. ${strValue}
  53. </#if>
  54. <br />
  55. </#list>
  56. <hr/>
  57. </div>
  58.  
  59. <div>
  60. 获取map中的值
  61. <br/>
  62. map:
  63. key1=${map.key1},key2=${map.key2},key3=${map.key3}
  64. <hr/>
  65. </div>
  66.  
  67. <#include "foot.html">
  68. </body>
  69. </html>

foot.html为了演示模板中引入文件的效果

  1. <div style="margin-top: 50px;text-align: center;font-size: 12px">
  2. <hr />
  3. this is foot
  4. </div>

3、编写Servlet,这次的Servlet完全不用涉及到FreeMarker的类库使用,只关心Model即可。

  1. package com.jsoft.testfreemarker;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.HashSet;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Set;
  11.  
  12. import javax.servlet.ServletException;
  13. import javax.servlet.annotation.WebServlet;
  14. import javax.servlet.http.HttpServlet;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17.  
  18. /**
  19. * Servlet implementation class TestServlet
  20. */
  21. @WebServlet(name = "test", urlPatterns = "/test")
  22. public class TestServlet extends HttpServlet {
  23. private static final long serialVersionUID = 1L;
  24.  
  25. /**
  26. * Default constructor.
  27. */
  28. public TestServlet() {
  29. // TODO Auto-generated constructor stub
  30. }
  31.  
  32. /**
  33. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  34. * response)
  35. */
  36. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  37. throws ServletException, IOException {
  38. String strValue = "this is String";
  39. Date myDate = new Date();
  40. Object[] objectArray = new Object[] { 1, "str", 1.2 };
  41. Set<Object> setData = new HashSet<Object>();
  42. setData.add("dataValue1");
  43. setData.add("dataValue2");
  44. setData.add("dataValue3");
  45. List<String> strList = new ArrayList<String>();
  46. strList.add("字符串1");
  47. strList.add("字符串2");
  48. strList.add("字符串3");
  49. Map<String, Object> map = new HashMap<String, Object>();
  50. map.put("key1", "value1");
  51. map.put("key2", "value2");
  52. map.put("key3", "value3");
  53. request.setAttribute("strValue", strValue);
  54. request.setAttribute("objectArray", objectArray);
  55. request.setAttribute("strList", strList);
  56. request.setAttribute("map", map);
  57. request.setAttribute("myDate", myDate);
  58. request.setAttribute("setData", setData);
  59. request.getRequestDispatcher("/WEB-INF/ftl/test.ftl").forward(request, response);
  60. }
  61.  
  62. /**
  63. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  64. * response)
  65. */
  66. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  67. throws ServletException, IOException {
  68. // TODO Auto-generated method stub
  69. doGet(request, response);
  70. }
  71.  
  72. }

4、测试效果

测试工程:https://github.com/easonjim/5_java_example/tree/master/freemarker/test3

FreeMarker与Servlet结合示例的更多相关文章

  1. Freemarker与Servlet

    1.导入jar包(freemarker.jar) 2.web.xml配置一个普通servlet <servlet> <servlet-name>hello</servle ...

  2. Servlet小示例:jsp页面提交信息Servlet接收并打印输出

    该示例采用doPost方法提交表单,该示例一共包含两个文件. 一个是用来提交用户信息的表单userForm2.jsp,另一个是用来接收参数的Servlet. userForm2.jsp <%@ ...

  3. Servlet Filter 示例

    1. CityQuery.java package com.xxx.servlet; import com.google.common.collect.Lists; import com.xxx.da ...

  4. 开发一个Servlet示例

    Servlet响应请求步骤: Servlet是一个基于Java技术的Web组件,运行在服务器端,用户利用Servlet可以很轻松地扩展Web服务器的功能,使其满足特定的应用需要.Tomcat是一个常用 ...

  5. freemarker学习 (servlet + freemarker -> Struts2+freemarker -> springMVC+freemarker)

    什么是freemarker? freemarker类似于jsp,但不是jsp!怎么说呢?freemarker文件后缀是.ftl,它不像jsp本质是servlet,它将构建模板.解析模板.使用模板分离开 ...

  6. 【学习笔记】FreeMarker 之于Servlet与Stuts2的应用

    FreeMarker应用在Servlet(0配置web.xml形式): 准备环境: tomcat7.eclipse最新版.jdk1.8.freemarker v2.3.20.jar 举例项目结构图: ...

  7. FreeMarker的基础语法

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  8. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  9. 用freemarker生产静态页面

    FreeMarker概述 * FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写     * Template + data model = output    ...

随机推荐

  1. Storm编程入门API系列之Storm的可靠性的ACK消息确认机制

    概念,见博客 Storm概念学习系列之storm的可靠性  什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理.即若没被处理的,得让我们知道. publi ...

  2. RabbitMQ~广播消息

    定义 广播消息是指生产者产生的消息将分发给所有订阅这个消息的消费者,而普通的模式是:一批消息可以被多个人共同消费,如consumer1可能消费1,3,5记录,而consumer2可能消费的是2,4,6 ...

  3. Spring Boot (27) actuator服务监控与管理

    actuaotr是spring boot项目中非常强大的一个功能,有助于对应用程序进行监控和管理,通过restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...

  4. VS中设置xml智能提示

    1.第一步:将xsd文件复制到VS的安装目录下 默认安装目录为:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Xml\Schemas 2.第二 ...

  5. 重新学习Java——对象和类(一)

    之前通过记笔记的方法,对于<Java核心技术>这本书的前一章进行了重新的复习,感觉效果很好,比单独看书带来了更好的复习效果,了解了很多以前不是很注意的一些细节,但是在一些自己较为熟悉的地方 ...

  6. (转)解决office软件无法卸载也无法安装的顽固问题

    原文地址 http://jingyan.baidu.com/article/f3ad7d0fcfe32509c3345bab.html 有时会出现office下载失败,然后又无法重新安装,导致offi ...

  7. HTML meta信息含义

    <meta name="viewport" content="width=device-width,initial-scale=1.0"> cont ...

  8. R语言学习 - 箱线图(小提琴图、抖动图、区域散点图)

    箱线图 箱线图是能同时反映数据统计量和整体分布,又很漂亮的展示图.在2014年的Nature Method上有2篇Correspondence论述了使用箱线图的好处和一个在线绘制箱线图的工具.就这样都 ...

  9. SpringBoot开源项目学习总结

    一.实现日期格式数据类型的转换 首先,定义DateConverter实现Converter<String, Date>接口: package com.stevlu.common; impo ...

  10. 服务器的部署与Web项目的发布

    今天给老师的服务器部署项目,这次是第二次,基于第一次的经验,这次可以说是驾轻就熟. 服务器的系统是Windows Server 2008 R2 (64位) 需要安装的软件是:jdk7.TomCat7. ...