Servlet整合FreeMarker

来源:互联网 发布:天津哪里有mac专柜 编辑:程序博客网 时间:2024/05/22 15:58

本例旨在演示Servlet整合FreeMarker的功能,具体的操作步骤下面具体介绍,FreeMarker.jar下载地址。

第一步:创建Web项目(本例使用的是Eclipse),FreeMarkerWeb。

第二步:创建Blog对象,用于封装数据。

public class Bolg {private String title; // 博客标题private Date date; // 创建日期private String content; // 博客内容public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}

第三步:创建用于生成List<Object>的数据工具DataUtils。

public class DataUtils {/** * 创建博客列表信息列表 * @return */public static List builtDataList() {List list = new ArrayList();for(int i=1;i<10;i++){Bolg bolg = new Bolg();bolg.setTitle("标题"+i);bolg.setDate(new Date());bolg.setContent("内容文本。。。。。。");list.add(bolg);}return list;}}

第四步:构建Freemarker中需要使用的Configuration。

public class FreeMarkerUtils {private static Configuration configuration;/** * 构建Configuration * 在整个应用的生命周期中,这个后工作你应该只做一次  创建和调整配置 * @return */private static Configuration bulitConfiguration() {if(null==configuration){configuration = new Configuration();//构建  \WEB-INF\ftl 的文件路径String path = FreeMarkerUtils.class.getResource("/").getPath();path = path.substring(1, path.indexOf("classes"));File ftlPathDir = new File(path+File.separator+"ftl");try {configuration.setDirectoryForTemplateLoading(ftlPathDir);configuration.setObjectWrapper(new DefaultObjectWrapper());} catch (IOException e) {e.printStackTrace();}return configuration;}return configuration;}/** * 获取模板Template * @param ftlName * @return */public static Template getTemplate(String ftlName){try {Template template = bulitConfiguration().getTemplate(ftlName);return template;} catch (IOException e) {e.printStackTrace();}return null;}}

第五步:创建Servlet(FreeMarkerServlet),并在web.xml配置FreeMarkerServlet。本例使用了Date对象,所以需要进行日期转换。

${parameters.fieldDate?date}         //标准日期转日期字符串

${parameters.fieldDate?datetime}   //标准日期转日期+时间字符串

${parameters.fieldDate?string("yyyy-MM-ddHH:mm:ss")}   //标准日期转自定格式 字符串

/** * Servlet implementation class FreeMarkerServlet */@WebServlet("/FreeMarkerServlet")public class FreeMarkerServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {/* 在整个应用的生命周期中,这个工作可以执行多次 */// 获取或创建模板Template template = FreeMarkerUtils.getTemplate("listObject.ftl");// 创建数据模型Map root = new HashMap();root.put("user", "Big Joe");Map latest = new HashMap();root.put("lastVisit", latest);latest.put("date", new Date());latest.put("ip", "green mouse");root.put("bolgs", DataUtils.builtDataList());/* 将模板和数据模型合并 */Writer out = new OutputStreamWriter(System.out);try {template.process(root, out);} catch (TemplateException e) {e.printStackTrace();}out.flush();System.out.println("输出结束。。。。。。");}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

web.xml

<servlet>  <servlet-name>freeMarkerServlet</servlet-name><servlet-class>com.mahaochen.freemarker.servlet.FreeMarkerServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>freeMarkerServlet</servlet-name>  <url-pattern>/servlet/freeMarkerServlet</url-pattern>  </servlet-mapping>

第六步:由于FreeMarker需要ftl(模板文件),在WEB-INF/ftl创建listObject.ftl。

<html><head> <title>Welcome!</title></head><body> <h1>Welcome ${user}!</h1> <p>You Last Visit:</p> <hr /> ${lastVisit.date?date}<br /> ${lastVisit.ip} <br /> <hr /> <table> <#list bolgs as bolg>        <tr>            <td>${bolg.title}</td>            <td>${bolg.date?string("yyyy-MM-dd HH:mm:ss")}</td>            <td>${bolg.content}</td>        </tr>      </#list> </table></body></html>




1 0
原创粉丝点击