java freemarker.docx

上传人:b****5 文档编号:8065250 上传时间:2023-01-28 格式:DOCX 页数:16 大小:27.08KB
下载 相关 举报
java freemarker.docx_第1页
第1页 / 共16页
java freemarker.docx_第2页
第2页 / 共16页
java freemarker.docx_第3页
第3页 / 共16页
java freemarker.docx_第4页
第4页 / 共16页
java freemarker.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

java freemarker.docx

《java freemarker.docx》由会员分享,可在线阅读,更多相关《java freemarker.docx(16页珍藏版)》请在冰豆网上搜索。

java freemarker.docx

javafreemarker

JavaFreeMarker资料整理和收集

(一)资料编号NO101

Freemarker简介

FreeMarker允许Javaservlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。

模板用servlet提供的数据动态地生成HTML。

模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写

FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据

FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

Freemarker开发配置

原本对freemarker了解不多,只知道是一种模板语言,我的个人网站设计时都没有考虑到使用freemarker,而是直接JSP展示。

在网站上线推广过程中了解到,各个搜索引擎对动态的链接不够友好,就是说对于网站中XXX.action?

name=这种格式的链接,搜索引擎不予收录,网络蜘蛛更亲奈.html的静态链接,为了便于更方便的网站推广,所以将网站集成URLREWRITER+FREEMARKER技术改写了全站链接。

大家可以去网站看下效果,细心的人还是可以看见.action的痕迹的。

现在网站中有两套链接,.action的动态链接,.html的静态链接。

链接的改写纯粹是为了便于网站的推广,URLREWRITER过滤器的使用,FREEMARKER模板语言开发,这两块本人将在后续文章中做详细讲解,本文将结合网站详细介绍STRUTS2+FREEMARKER的开发配置。

1、准备相应的JAR包,struts2-core-2.0.11.2.jar,xwork-2.0.5.jar,ognl-2.6.11.jar,freemarker-2.3.8.jar,commons-logging-1.0.4.jar

2、解压缩struts2-core-2.0.11.2.jar复制META-INF/struts-tags.tld复制到工程WEB-INF目录下,FREEMARKER中默认是不支持struts2标签的,所以需将标签库导入模板中。

3、修改WEB.XML文件,添加STRUTS2过滤器

Java代码

struts2

org.apacher.sturts2.dispatcher.FilterDispatcher

struts2

/*

注意:

对于网络上所说的要想在Freemarker中使用Struts2标签必须配置一个新SERVLET

Java代码

JspSupportServlet

org.apache.struts2.views.JspSupportServlet

1

在本人的实践中发现这步并非必须的,此处有待深入研究

4、接下来这步应该是最重要的,配置struts.xml文件

Java代码

/secondPage.jsp

以上ACTIN配置为正常使用STRUTS2的配置,但在结合FREEMARKER中则需做如下改变

Java代码

/WEB-INF/template/secondPage.ftl

注意:

元素的type属性必须设置为freemarker,这是因为Freemarker模板文件必须由Freemarker模板引擎来解析,而Struts2内部实现了Freemarker模板引擎,但我们必须声明返回结果类型为freemarker才可以

经过以上四步,STRUTS2+FREEMARKER配置完成,可以进行开发应用,下面展示一个简单的实例

Java代码

IndexAction.java

……

privateLoglog=LogFactory.getLog(IndexAction.class);

privateStringusername;

privateStringpassword;

/**

*登录处理

*@return

*@throwsException

*/

publicStringgetVediosByCategory()throwsException{

log.info("执行了登录方法getVediosByCategory()");

returnSUCCESS;

}

省略相应(getter,setter方法)

创建登录页面index.jsp

Java代码

formaction="getVediosByCategory">

登录名:

textfieldname="username"/>

密码:

textfieldname="password"/>

submitvalue="登录"/>

form>

创建结果页面:

user.ftl

Java代码

<#--

<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]>

-->

欢迎<@s.propertyvalue="username"/>登录!

注意:

1、Struts2标签在JSP页面中的写法与在Freemarker模板文件中的写法不同。

Freemarker模板文件是以<@s.tag>开始,以结束

2、Freemarker模板文件的处理,通过Web容器是无法直接处理的,因此不要让用户直接访问模板文件。

在开发过程中,我们可以将Freemarker文件直接放到Web工程的WEB-INF目录或其子目录下(用户无法访问WEB-INF目录下文件),并在相应的struts-*.xml文件中配置type="freemarker"来输出模板

 

FREEMARKER接触不深,如有不足之处请大虾们多多指正

(二)资料编号NO102

FreeMarker也是与Web容器无关的,也就是FreeMarker并不一定需要运行在Web容器中:

FreeMarker同样可以应用于非Web应用程序环境.而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML,RTF,Java源代码等。

Struts2默认采用FreeMarker作为其模板文件,而Struts2所有的主题模板文件都是采用FreeMarker编写的,eclipse中的JSP,Java等模板文件也是采用FreeMarker技术.

一、在struts2中使用freemarker

以一个简单的添加用户信息为例:

当用户点击首页中的“添加用户”连接时,这时会发出一个添加用户页面的请求(addInput.action),然后通过我们的返回一个添加页面,下面是我们普通的struts2配置文件一般是这么配置的:

/addInput.jsp

addInput.jsp文件:

<%@pagelanguage="java"import="java.util.*"pageEncoding="ISO-8859-1"%>

Inserttitlehere

添加用户:

username:


password:

或者采用struts2标签:

<%@pagelanguage="java"import="java.util.*"pageEncoding="ISO-8859-1"%>

<%@taglibprefix="s"uri="/struts-tags"%>

Inserttitlehere

添加用户:

formaction="add"method="post">

textfieldlabel="username:

"name="username"/>

passwordlabel="password:

"name="password"/>

submitvalue="add"/>

form>

在action返回的view是一个jsp页面,也可以改成是一个freemarker模板页面:

/addInput.ftl

addInput.ftl模板文件

当然我们希望能在addInput.ftl上也能够使用struts2的标签,需要在addInput.ftl页面最开始添加对struts2标签的引用:

<%@taglibprefix="s"uri="/struts-tags"%>

注意:

struts2在freemarker页面中标签写法和jsp页面的写法不同,freemarker里是<@s.form>,jsp里是

form>,一定不要写错了!

使用时发现对中文的支持不好,显示时中文出现乱码,这里修改下struts.xml配置文件:

现在就可以在struts2中正常使用freemarker了!

二、在java程序中使用FreeMarker

FreeMarker的模板就是一个.ftl文本文件,在该文件中使用了一些FreeMarker的特别标记,这些标记会动态显示,或者控制程序输出,如下面的模板文件代码:

${name},你好!

${msg}

这里类似于${}的就是动态的内容,称作"插值".

为了使用FreeMarker来将数据模型中的值合并到模板文件中,可按如下步骤进行:

1,创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例

2,使用Configuration实例来生成Template实例,同进需要指定使用的模板文件

3,填充数据模型,数据模型就是一个Map对象

4,调用Template实例的process方法完成合并.

下面来看看几个测试实例,以加深我们的对模板语言的认识:

实例一:

Freemarker基本使用方法:

我们下面就用一个使用FreeMarker来创建一个java测试程序,将模板中的内容输出的指定的文件中,来简单了解一下其基本语法,程序源代码如下:

publicvoidtestFreemarker01()throwsException{

//指定模板文件路径(在项目下,你可以修改此路径)

Stringdir="E:

/workspace/freemarker/src/com/freemarker/test";

//创建一个Configuration对象:

该实例负责管理FreeMarker的模板加载路径,负责生成模板实例

Configurationcfg=newConfiguration();

//配置freemarker从什么地方加载模板文件,通过创建的Configuration对象加载模板文件

cfg.setDirectoryForTemplateLoading(newFile(dir));

//加载模板,生成模板实例对象,同时制定所使用的模板文件

Templatetemplate=cfg.getTemplate("test01.ftl");

//定义数据模型(Map对象),并填充数据

Maproot=newHashMap();

root.put("strvalue","世界,你好");

//定义输出,将其输出到指定文件中去

Writerout=newFileWriter(dir+"/test01_out.txt");

//处理执行,将模板与数据进行合并

template.process(root,out);

}

test01.ftl模板文件如下:

第一个测试程序:

${strvalue}

test01_out.txt文件内容结果:

第一个测试程序:

世界,你好

实例二:

Freemarker中关于空值的处理问题:

当在模板文件中取值,拿不到,为空值时,freemaker默认会将错误信息打印在页面中或输出到指定文件中,为了将错误信息隐藏到后台,而不要现在前台页面中,需要设置setTemplateExceptionHandler

来忽略异常信息,具体代码如下:

//关于空值的处理问题

publicvoidtestFreemarker02()throwsException{

Stringdir="E:

/workspace/freemarker/src/com/freemarker/test";

Configurationcfg=newConfiguration();

//配置freemarker从什么地方加载模板文件

cfg.setDirectoryForTemplateLoading(newFile(dir));

[color=red]//增加设置忽略异常

cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);[/color]

//加载模板

Templatetemplate=cfg.getTemplate("test02.ftl");

//定义数据

Maproot=newHashMap();

//root.put("strvalue","世界,你好");

root.put("boolvalue",true);

root.put("today",newDate());

//定义输出

Writerout=newFileWriter(dir+"/test02_out.txt");

template.process(root,out);

}

贴出模板文件test02.ftl:

${strvalue}

${boolvalue?

string("是","否")}

${today?

string("yyyy年MM月dd日")}

文件test02_out.txt显示结果:

2010年04月11日

如果上面的不设置忽略异常的话,则在模板文件中的${strvalue}将取不到值而在页面显示错误,当然可以在模板文件中可以使用条件判断将空值情况排除

<#ifstrvalue?

exists>

实例三:

关于集合处理的问题

在模板中显示数据模型中集合列表信息,

显示集合列表信息:

<#list>

条件判断:

<#if变量?

exists>

条件${?

string("1","0")}关于这些还是去看实例吧,我就不在这里描述了。

从实例中去学习其语法。

具体代码如下:

//关于集合的处理

publicvoidtestFreemarker03()throwsException{

Stringdir="E:

/workspace/freemarker/src/com/freemarker/test";

Configurationcfg=newConfiguration();

//配置freemarker从什么地方加载模板文件

cfg.setDirectoryForTemplateLoading(newFile(dir));

//忽略异常

cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

//加载模板

Templatetemplate=cfg.getTemplate("test03.ftl");

//定义数据

Maproot=newHashMap();

Listlist=newArrayList();

for(inti=0;i<10;i++){

list.add("listvalue"+i);

}

root.put("list",list);

//定义输出

Writerout=newFileWriter(dir+"/test03_out.txt");

template.process(root,out);

}

test03.ftl模板文件如下:

listvalue:

<#--正常显示的文本信息-->

<#listlistasv>

${v}-${v_index}[${v_has_next?

string("y","n")}]

test03_out.txt显示结果如下:

listvalue:

listvalue0-0[y]

listvalue1-1[y]

listvalue2-2[y]

listvalue3-3[y]

listvalue4-4[y]

listvalue5-5[y]

listvalue6-6[y]

listvalue7-7[y]

listvalue8-8[y]

listvalue9-9[n]

实例四:

关于宏定义的应用<#macro>

//关于freemarker的宏定义

publicvoidtestFreemarker04()throwsException{

Stringdir="E:

/workspace/freemarker/src/com/freemarker/test";

Configurationcfg=newConfiguration();

//配置freemarker从什么地方加载模板文件

cfg.setDirectoryForTemplateLoading(newFile(dir));

//忽略异常

cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

//加载模板

Templatetemplate=cfg.getTemplate("test04.ftl");

//定义数据

Maproot=newHashMap();

root.put("name","李四");

//定义输出

Writerout=newFileWriter(dir+"/test04_out.txt");

template.process(root,out);

}

来看看模板文件test04.ftl:

<#macrogreetp>

Hello,${p}

<@greetp="张三"/>

<@greetp="${name}"/>

来看看输出文件的结果:

Hello,张三

Hello,李四

实例五:

关于auto-import特性的使用,自动引入模板文件

//关于auto-import特性

publicvoidtestFreemarker05()throwsException{

Stringdir="E:

/workspace/freemarker/src/com/freemarker/test";

Configurationcfg=newConfiguration();

//配置freemarker从什么地方加载模板文件

cfg.setDirectoryForTemplateLoading(newFile(dir));

//忽略异常

cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

//添加auto-import

cfg.addAutoImport("my","common.ftl");

//加载模板

Templatetemplate=cfg.getTemplate("test05.ftl")

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1