FreeMarker javaWord格式文档下载.docx
- 文档编号:4218898
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:10
- 大小:19.57KB
FreeMarker javaWord格式文档下载.docx
《FreeMarker javaWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《FreeMarker javaWord格式文档下载.docx(10页珍藏版)》请在冰点文库上搜索。
//创建一个Configuration实例
cfg=newConfiguration();
//设置FreeMarker的模版文件位置
cfg.setDirectoryForTemplateLoading(newFile("
templates"
));
}
publicvoidprocess()throwsException
Maproot=newHashMap();
root.put("
name"
"
FreeMarker!
"
);
msg"
"
您已经完成了第一个FreeMarker的示例"
Templatet=cfg.getTemplate("
test.ftl"
t.process(root,newOutputStreamWriter(System.out));
}
publicstaticvoidmain(String[]args)throwsException
HelloFreeMarkerhf=newHelloFreeMarker();
hf.init();
hf.process();
上面的代码创建了一个Map实例,这个Map将作为模板文件的数据模型,我们要使用FreeMarker必须导入freemarker.jar文件,FreeMarker的官网是
2,在Web应用中使用FreeMarker
在Web应用中使用FreeMarker跟在Java程序中使用并没有太大的区别.下面是是一个在Web中使用的例子,用来生成HTML页面的模板文件内容如下:
<
html>
head>
title>
FreeMarker的HelloWorld<
/title>
/head>
body>
${message}
/body>
/html>
我们在Web应用中使用FreeMarker时,应该让Servlet来合并模板和数据,因此,Servlet负责创建Configuration实例,并负责合并模板和数据,下面是Servlet源代码:
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHelloServletextendsHttpServlet
publicvoidinit()
cfg.setServletContextForTemplateLoading(getServletContext(),"
WEB-INF/templates"
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{
//建立数据模型
message"
HelloFreeMarker!
//取得模版文件
//开始准备生成输出
//-使用模版文件的charset作为本页面的charset
//-使用text/htmlMIME-type
response.setContentType("
text/html;
charset="
+t.getEncoding());
Writerout=response.getWriter();
//合并数据模型和模版,并将结果输出到out中
try
{
t.process(root,out);
}
catch(TemplateExceptione)
thrownewServletException("
处理Template模版中出现错误"
e);
可以看到这个Servlet类的代码与普通的Java程序中使用FreeMarker大致一样,区别有两个:
1,设置FreeMarker加载模板的方法不一样,在Servlet中设置加载的方法是setServletContextForTemplateLoading,第一个参数是本web应用的ServletContext,第二个参数是模板文件的路径.;
2,结果必须输出到HttpServletResponse中,才能被浏览器加载.
配置Servlet的web.xml文件中的代码如下:
web-app>
servlet>
<
servlet-name>
hello<
/servlet-name>
servlet-class>
lee.HelloServlet<
/servlet-class>
/servlet>
servlet-mapping>
url-pattern>
/hello<
/url-pattern>
/servlet-mapping>
/web-app>
3,FreeMarker的模板文件
从上面的例子可以看到FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:
1,文本:
直接输出的部分
2,注释:
#--...-->
格式部分,不会输出
3,插值:
即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出
4,FTL指令:
FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出
下面是一个FreeMarker模板的例子,包含了以上所说的4个部分
br>
Welcome!
#--注释部分-->
#--下面使用插值-->
h1>
Welcome${user}!
/h1>
p>
Wehavetheseanimals:
u1>
#--使用FTL指令-->
#listanimalsasbeing>
li>
${being.name}for${being.price}Euros<
#list>
FreeMarker的语法知识将在下一篇文章中介绍
4,使用FreeMarker作为Struts2的视图技术
Struts2使用FreeMarker作为其默认的模板技术,因此Struts2对FreeMarker的支持非常良好,为了在Struts2中使用FreeMarker模板技术,只需要在struts.xml文件中进行简单配置即可.
4.1在FreeMarker模板中使用Struts2标签
在FreeMarker模板中使用标签毕竟不同于在JSP页面中使用标签,因为FreeMarker不支持使用taglib指令来导入标签库.但Struts2为了在FreeMarker模板中使用标签库提供了额外的支持.可以按照下面的步骤进行:
1,将系统所需要的标签库定义文件(.tld文件)复制到WEB-INF目录下,对于Struts2,则是复制struts2-core-2.0.11.2.jar中的META-INF/struts-tags.tld文件
2,在web.xml文件中启动JspSupportServlet.为了启动它,则应该在web.xml文件中增加如下配置片段:
!
--定义一个JspSupportServlet-->
JspSupportServlet<
org.apache.struts2.views.JspSupportServlet<
--配置JspSupportServlet优先启动-->
load-on-startup>
1<
/load-on-startup>
3,在FreeMarker模板中使用assign指令导入标签库,导入标签库的代码如下:
#--定义/WEB-INF/struts-tags.tld文件对应的标签库前缀为s-->
#assigns=JspTaglibs["
/WEB-INF/struts-tags.tld"
]/>
4,在FreeMarker模板中增加了标签库的定义之后就可以使用了,下面是在FreeMarker模板中使用标签的代码:
#--在FreeMarker中使用Struts2标签-->
@s.formaction="
Login.action"
>
@s.textfieldname="
username"
label="
用户名"
/>
password"
密码"
@s.submitvalue="
提交"
/@s.form>
如果是在JSP中使用Struts2标签,则格式如下:
s:
formaction="
textfieldname="
submitvalue="
/s:
form>
值得注意的是,我们不能通过浏览器直接访问.ftl文件,否则将看到该模板页面的源代码,而不是我们想要的生成的HTML页面.这是因为Web容器默认不会处理FreeMarker模板页面.
在Struts2框架下,Struts2框架充当了之前的Servlet角色,只要浏览器的请求经过Struts2处理后,Struts2都会自动加载FreeMarker模板,并使用数据模型来填充该模板,再将最后的HTML页面输出给客户端.为了让所有的用户请求都经过Struts2的处理,这里将所有的FreeMarker模板放在WEB-INF/ftl目录下.(WEB-INF目录下的所有文件客户端都是不能直接访问的),因为浏览器无法访问.ftl文件了,因此我们在struts.xml配置文件中增加如下配置:
--配置匹配所有请求的Action-->
actionname="
*"
resulttype="
freemarker"
/WEB-INF/ftl/{1}.ftl<
/result>
/action>
国为增加了上面的配置,在浏览器中请求login.action的时候,该action会被转向login.ftl模板.此时就可以看到返回的HTML页面.
4.2使用FreeMarker的Result
从前面我们可以看到,使用FreeMarker与使用JSP作为输出文件并没有太大区别,下面来看看刚才的应用中Action中的代码:
importcom.opensymphony.xwork2.Action;
importcom.opensymphony.xwork2.ActionContext;
publicclassLoginActionimplementsAction
privateStringusername;
privateStringpassword;
publicStringgetUsername()
returnusername;
publicvoidsetUsername(Stringusername)
this.username=username;
publicStringgetPassword()
returnpassword;
publicvoidsetPassword(Stringpassword)
this.password=password;
publicStringexecute()throwsException
if(getUsername().equals("
scott"
)
&
&
getPassword().equals("
tiger"
))
ActionContext.getContext().getSession().put("
user"
getUsername());
returnSUCCESS;
else
returnERROR;
此Action在struts.xml文件中的配置如下:
Login"
class="
lee.LoginAction"
resultname="
error"
type="
/WEB-INF/ftl/error.ftl<
success"
/WEB-INF/ftl/welcome.ftl<
返回的成功页面代码如下:
成功页面<
欢迎,${user},您已经登录!
ahref="
GetBooks.action"
查看作者李刚已出版的图书<
/a>
可以看到这个成功页面会将user变量中的内容读出并显示,实际上,该变量值将可以从多个地方取得,Struts2解析FreeMarker模板中变量的顺序如下:
1,FreeMarker模板内建的变量;
2,ValueStack中的变量;
3,ActionContext中的变量;
4,HttpServletRequest中的属性;
5,HttpSession中的属性;
6,ServletContext范围的属性.
FreeMarker模板的内建变量有如下几个:
1,stack:
代表ValueStack本身,可通过如下方式来访问其中的变量"
${stack.findString('
ognlexpr'
)}"
2,action:
代表刚刚执行过的Action实例
3,response:
代表HpptServletResponse实例
4,res:
5,request:
代表HpptServletRequest实例
6,req:
7,session:
代表HpptSession实例
8,application:
代表ServletContext实例
9,base:
代表用户请求的上下文路径.
4.3FreeMarker中访问Servlet/JSP范围对象
Struts2还为在FreeMarker模板中访问Servlet/JSP范围对象提供了支持,通过这种支持可以直接访问这些变量.
访问application范围内的属性代码如下:
#ifApplication.attributeName?
exists>
${Application.attributeName}
/#if>
也可以通过使用Struts2标签来输出,代码如下:
@s.propertyvalue="
${#application.attributeName}"
/>
访问session范围内的属性如下:
#ifSession.attributeName?
${Session.attributeName}
或
${#session.attributeName}"
访问request范围内的属性如下:
#ifRequest.attributeName?
${Request.attributeName}
${#request.attributeName}"
对于request,还可以访问request的请求参数,如下:
#ifParameter.parameterName?
${Parameter.parameterName}
${#parameter.parameterName}"
访问ValueStack上下文参数,代码如下:
${stack.findValue('
#myContextParam'
)}
${#myContextParam}"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FreeMarker java