freemarker实现和原理
来源:互联网 发布:windows 2008 加入域 编辑:程序博客网 时间:2024/06/15 11:35
1.freemarker实现
1.工程目录结构
2.引入jar包
引入freemarker-2.3.15.jar包
3.web.xml配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>FreemarkerDemo</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>freemarker</servlet-name> <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class> <!-- FreemarkerServlet settings: --> <init-param> <param-name>TemplatePath</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>NoCache</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>ContentType</param-name> <param-value>text/html</param-value> </init-param> <init-param> <param-name>template_update_delay</param-name> <param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. --> </init-param> <init-param> <param-name>locale</param-name> <param-value>zh_CN</param-value> </init-param> <init-param> <param-name>default_encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>boolean_format</param-name> <param-value>true,false</param-value> </init-param> <init-param> <param-name>datetime_format</param-name> <param-value>yyyy-MM-dd HH:mm:ss</param-value> </init-param> <init-param> <param-name>date_format</param-name> <param-value>yyyy-MM-dd</param-value> </init-param> <init-param> <param-name>time_format</param-name> <param-value>HH:mm:ss</param-value> </init-param> <init-param> <param-name>number_format</param-name> <param-value>0.##########</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping></web-app>
ftl文件,body.ftl,定义一个body宏
<#macro m1><h1>aaa</h1><h1>aaa</h1><h1>aaa</h1><h1>aaa</h1></#macro>
freemarkerTest.ftl文件引入body宏
<html><head><#import "body.ftl" as p></head><body><@p.m1/></body></html>
启动tomcat,在浏览器中输入http://localhost/FreemarkerDemo/freemarkerTest.ftl
引入freemarker成功。
2.原理
freemarker大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。
代码实现:
Configuration config=new Configuration(); //设置要解析的模板所在的目录,并加载模板文件 config.setDirectoryForTemplateLoading(new File(templatePath)); //设置包装器,并将对象包装为数据模型 config.setObjectWrapper(new DefaultObjectWrapper()); //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致 //否则会出现乱码Template template=config.getTemplate(templateName,“UTF-8”); //合并数据模型与模板 FileOutputStream fos = new FileOutputStream(fileName); Writer out = new OutputStreamWriter(fos,“UTF-8”); template.process(root, out); out.flush(); out.close();
另:freemarker变量值的获取
在Struts2框架下,Struts2框架充当了之前的Servlet角色,只要浏览器的请求经过Struts2处理后,Struts2都会自动加载FreeMarker模板,并使用数据模型来填充该模板,再将最后的HTML页面输出给客户端
Struts2解析FreeMarker模板中变量的顺序如下:
1,FreeMarker模板内建的变量;
2,ValueStack中的变量;
3,ActionContext中的变量;
4,HttpServletRequest中的属性;
5,HttpSession中的属性;
6,ServletContext范围的属性.
FreeMarker模板的内建变量有如下几个:
1,stack:代表ValueStack本身,可通过如下方式来访问其中的变量”${stack.findString(‘ognl expr’)}”
2,action:代表刚刚执行过的Action实例
3,response:代表HpptServletResponse实例
4,res:代表HpptServletResponse实例
5,request:代表HpptServletRequest实例
6,req:代表HpptServletRequest实例
7,session:代表HpptSession实例
8,application:代表ServletContext实例
9,base:代表用户请求的上下文路径.
- freemarker实现和原理
- Freemarker原理
- Freemarker原理解析
- Freemarker原理解析
- Freemarker原理解析
- 使用JQueryUI + FreeMarker 实现Div动态DIalog添加和删除
- 用Spring MVC和Freemarker实现导出PDF
- 使用java 和freemarker实现多级菜单(分类)
- Taglib原理和实现
- Taglib原理和实现
- Taglib 原理和实现
- Taglib原理和实现
- SSL原理和实现
- SSL原理和实现
- RSS原理和实现
- SSL原理和实现
- taglib 原理和实现
- qsort原理和实现
- 黑马程序员--冒泡排序
- 协程
- iOS - 设置cell显示还是不显示机制
- [LeetCode] Count and Say
- 欢迎使用CSDN-markdown编辑器
- freemarker实现和原理
- JS gzip加密字符串并base64输出
- LinearLayout和RelativeLayout的特殊属性
- 如何免费试用访问Google
- HTML中id与name的区别
- 安装Fedora 23后需要做几件事
- Cookie/Session机制详解
- Android SDK Manager更新缓慢的解决方法 - 总结
- od命令