一个简单的FreeMarker案例

简介: 1,首先:导入FreeMarker的Jar文件2,写一个JavaBean用于封装数据package freemarker; public class UserInfo {         private String uname=null;         private int uage = 0;         public String getUname() {     

1,首先:导入FreeMarkerJar文件

2,写一个JavaBean用于封装数据

package freemarker;

 

public class UserInfo {

         private String uname=null;

         private int uage = 0;

         public String getUname() {

                   return uname;

         }

         public void setUname(String uname) {

                   this.uname = uname;

         }

         public int getUage() {

                   return uage;

         }

         public void setUage(int uage) {

                   this.uage = uage;

         }

}

3,写一个测试用的Test

package freemarker;

 

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import freemarker.template.Configuration;

import freemarker.template.Template;

 

public class FreeMarkerTest {

 

         private Configuration cfg = null;

        

         public Configuration getConf(){

                   return cfg;

         }

        

         public void init() throws Exception {

                   cfg = new Configuration();

                   cfg.setDirectoryForTemplateLoading(new File("bin/freemarker"));//模板文件所在的位置

         }

         public static void main(String[] args) throws Exception {

                   FreeMarkerTest obj = new FreeMarkerTest();

                   obj.init();

                   Map root = new HashMap();

                   UserInfo u = new UserInfo();

                   u.setUname("熊师虎");

                   u.setUage(100);

                   List strList = new ArrayList();

                   strList.add("aa");

                   strList.add("bb");

                   strList.add("cc");

                   strList.add("dd");

                  

                   root.put("strlist", strList);

                   root.put("u", "u");//放入用户的信息,在模板中可以取到用户的信息

                   root.put("htag", "<h1>我是一级标题</h1>");

                   Template t = obj.getConf().getTemplate("Test.ftl");

                  //WebRoot目录下构建一个test1.html

                   Writer out = new OutputStreamWriter(new FileOutputStream("WebRoot/eg.html"),"GBK");

                   t.process(root, out);//开始转化处理

                   System.out.println("Successfull.....");

         }

}

 

 

4,写一个Servlet

package control;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import freemarker.UserInfo;

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

 

public class FreeMarkerServletextends HttpServlet {

         public FreeMarkerServlet() {

                   super();

         }

        

         @Override

         public void destroy() {

                   super.destroy();

         }

 

         public void doGet(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

                   Configuration cfg=new Configuration();

                   //String path=this.getServletContext().getRealPath("bin/freemarker");

                   //cfg.setDirectoryForTemplateLoading(new File(path));

                   cfg.setServletContextForTemplateLoading(this.getServletContext(), "bin/freemarker");

                   Template tp=cfg.getTemplate("test.ftl");

                   //因为这个是一个Servlet,所以要用这个,并且由于在Content-Type中配置的字符集都是UTF-8,所以在此处要也设置成UTF-8

                   Writer out=new OutputStreamWriter(new FileOutputStream(this.getServletContext().getRealPath(".")+"/eg.html"),"utf-8");   //注意的是这里的字符集定要和自己配置的字符集是相同的,否则将出现乱码。并且注意OutputStreamWriter转为Writer的方法。

                   //PrintWriter out=new PrintWriter(new FileOutputStream(new File(this.getServletContext().getRealPath(".")+"/eg.html")));////如果为serveletresponse.getOutputStream()

                   Map root = new HashMap();

                   UserInfo u=new UserInfo();

                   u.setUname("熊师虎");

                   u.setUage(100);

                   root.put("u", u);//放入用户的信息,在模板中可以取到用户的信息

                  

                   List strlist=new ArrayList();

                   strlist.add("aa");

                   strlist.add("bb");

                   strlist.add("cc");

                   strlist.add("dd");

                   root.put("strlist", strlist);

                  

                   root.put("htag", "<h1>我是一级标题</h1>");

 

                   try {

                            tp.process(root, out);

                   } catch (TemplateException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                   }

                   System.out.println("Successfull................");

                  

        

                   out.flush();

                   out.close();

         }

 

         public void doPost(HttpServletRequest request, HttpServletResponse response)

                            throws ServletException, IOException {

 

                   doGet(request, response);

         }

 

}

5、配置servleturl-pattern为:FreeMarkerServlet

6、运行FreeMarkerTest或访问FreeMarkerServlet,用以生成e.html

7、访问e.html,即在浏览器中输入:http://localhost:8080/freemarker/eg.html

 

 

 

 

目录
相关文章
idea 懒人神器 保存自动格式化 Save Action插件
idea 懒人神器 保存自动格式化 Save Action插件
1360 0
idea 懒人神器 保存自动格式化 Save Action插件
|
存储 数据采集 安全
各种系统架构图与详细说明
原文:各种系统架构图与详细说明 共享平台逻辑架构设计 如上图所示为本次共享资源平台逻辑架构图,上图整体展现说明包括以下几个方面: 1 应用系统建设 本次项目的一项重点就是实现原有应用系统的全面升级以及新的应用系统的开发,从而建立行业的全面的应用系统架构群。
26888 1
|
测试技术 索引
Elasticsearch search after分页检索案例
Elasticsearch search after分页检索案例分享 The best elasticsearch highlevel java rest api-----bboss 1.准备工作 参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端 2.
5874 0
|
7月前
|
数据挖掘
DataphinV4.5:资产详情丰富:血缘、质量评分、变更记录助力确信资产可用性
DataphinV4.5版本通过展示血缘关系图、质量概况和元数据变更记录,助力解决这些问题。血缘关系帮助厘清数据依赖链路,质量概况提供数据可靠性评估依据,元数据变更记录便于追踪数据变动影响。这些功能丰富了资产信息,有助于提升数据分析与开发的效率,减少沟通成本。
211 0
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
422 0
|
存储 数据挖掘 数据处理
【解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG 】
【解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG 】
1217 0
|
分布式计算 算法 搜索推荐
阿里巴巴内部:全技术栈PPT分享(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇、算法篇、大数据、Java后端架构!除了大家熟悉的交易、支付场景外,支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心技术栈:覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 大数据:Spark、Hadoop
|
JSON Java 数据格式
Java jackson 由String转成List和各种对象
时间久了,会忘记具体怎么转,记录一下,后面方便使用
1304 1
|
消息中间件 监控 测试技术
Flink实时计算大促压测实践
Flink实时计算大促压测实践
304 0
|
XML 数据格式
xml和map互转工具类
/** * xml转map工具类 * @author zhangyao * */ public class XmlToMapUtil { /** * xml转map 不带属性 * @param xmlStr ...
3486 0