- 浏览: 304283 次
- 性别:
- 来自: 河南开封
文章分类
最新评论
-
keven_niu:
好不错哦。。
jquery dialog对话框插件实例弹层效果 -
我是云:
zjuttsw 写道zjuttsw 写道楼主最后两个例子很好。 ...
Java switch-case语句用法 -
ytt06460105:
问题已解决。
使用JDBC访问DB2的问题:no db2jdbc in java.library.path -
ytt06460105:
楼主:按照你的方法做了,又出现了新的错误:[com.aliba ...
使用JDBC访问DB2的问题:no db2jdbc in java.library.path -
zjuttsw:
zjuttsw 写道楼主最后两个例子很好。学习了 不过第三条好 ...
Java switch-case语句用法
FreeMarker概述
* FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
* Template + data model = output
FreeMarker 是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.界面开发人员只需要关于界面(也就是模板文件)的开发,而业务逻辑开发者只需要负责将需要显示的数据填入数据模型-----FreeMarker负责合并数据模型和模板, 从而生成标准输出.
FreeMarker特别适应于MVC模式的Web应用,虽然FreeMarker具有一些编程能力,但这种编程能力非常有限,无法实现业务逻辑, 只能提供一些数据格式的转换功能.因此,通常由Java程序准备要显示的数据,由FreeMarker模板引擎来生成页面,而FreeMarker模板则提供页面布局支持.(好处:严格实现MVC分离)
此外,FreeMarker也是与Web容器无关的,也就是FreeMarker并不一定需要运行在Web容器中:FreeMarker同样可以应用于非Web应用程序环境.而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML,RTF,Java源代码等.
Struts2默认采用FreeMarker作为其模板文件,而Struts2所有的主题模板文件都是采用FreeMarker编写的,eclipse中的JSP,Java等模板文件也是采用FreeMarker技术.
1.
在struts2中使用freemarker
普通的struts2配置文件一般是这么配置的:
这里的view是一个jsp页面,也可以改成是一个freemarker模板页面:
当然我们希望能在fm.ftl上使用struts2的标签,需要在fm.ftl页面最开始添加对struts2标签的引用:
引用前把struts2-core-2.0.x.x.jar包里的META-INF/struts-tags.tld 复制到 /WEB-INF/struts-tags.tld
默认是不支持JspTaglibs的引用的,这里还需要一个额外的配置,修改web.xml,添加如下内容:
一个简单的fm.ftl文件的例子:
注意:struts2在freemarker页面中标签写法和jsp页面的写法不同,freemarker里是<@s.form>,jsp里是<s:form>,一定不要写错了!
使用时发现对中文的支持不好,显示时中文出现乱码,这里修改下struts.xml配置文件:
现在就可以在struts2中正常使用freemarker了!
自己的一个实例:
(1)在struts.xml添加跳转:
(2)
在ACTION中,进行设置:
(3)
设置模板文件:jsearch.ftl:
(4)
如果要使用STRUTS2.0的标签,如上面.就要添加STRUTS2.0的标签库:
web.xml添加:
在jsearch.ftl最前面添加:
2,在java程序中使用FreeMarker
FreeMarker的模板就是一个.ftl文本文件,在该文件中使用了一些FreeMarker的特别标记,这些标记会动态显示,或者控制程序输出,如下面的模板文件代码:
${name},你好!${msg}
这里类似于${}的就是动态的内容,称作"插值".
为了使用FreeMarker来将数据模型中的值合并到模板文件中,可按如下步骤进行:
1,创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例
2,使用Configuration实例来生成Template实例,同进需要指定使用的模板文件
3,填充数据模型,数据模型就是一个Map对象
4,调用Template实例的process方法完成合并.
下面是一个使用FreeMarker创建输出的Java程序,程序源代码如下:
上面的代码创建了一个Map实例,这个Map将作为模板文件的数据模型,我们要使用FreeMarker必须导入freemarker.jar文件,FreeMarker的官网是http://freemarker.sourceforge.net/,虽然FreeMarker可以在Java程序中使用,但大部分时候还是用来生成HTML页面.
3,在Web应用中使用FreeMarker
在Web应用中使用FreeMarker跟在Java程序中使用并没有太大的区别.下面是是一个在Web中使用的例子,用来生成HTML页面的模板文件内容如下:
我们在Web应用中使用FreeMarker时,应该让Servlet来合并模板和数据,因此,Servlet负责创建Configuration实例,并负责合并模板和数据,下面是Servlet源代码:
可以看到这个Servlet类的代码与普通的Java程序中使用FreeMarker大致一样,区别有两个:1,设置FreeMarker加载模板的方法不一样,在Servlet中设置加载的方法是setServletContextForTemplateLoading,第一个参数是本web应用的 ServletContext,第二个参数是模板文件的路径.;2,结果必须输出到HttpServletResponse中,才能被浏览器加载.
配置Servlet的web.xml文件中的代码如下:
4,FreeMarker的模板文件
从上面的例子可以看到FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:
1,文本:直接输出的部分
2,注释:<#-- ... -->格式部分,不会输出
3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出
4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出
下面是一个FreeMarker模板的例子,包含了以上所说的4个部分
* FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
* Template + data model = output
FreeMarker 是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.界面开发人员只需要关于界面(也就是模板文件)的开发,而业务逻辑开发者只需要负责将需要显示的数据填入数据模型-----FreeMarker负责合并数据模型和模板, 从而生成标准输出.
FreeMarker特别适应于MVC模式的Web应用,虽然FreeMarker具有一些编程能力,但这种编程能力非常有限,无法实现业务逻辑, 只能提供一些数据格式的转换功能.因此,通常由Java程序准备要显示的数据,由FreeMarker模板引擎来生成页面,而FreeMarker模板则提供页面布局支持.(好处:严格实现MVC分离)
此外,FreeMarker也是与Web容器无关的,也就是FreeMarker并不一定需要运行在Web容器中:FreeMarker同样可以应用于非Web应用程序环境.而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML,RTF,Java源代码等.
Struts2默认采用FreeMarker作为其模板文件,而Struts2所有的主题模板文件都是采用FreeMarker编写的,eclipse中的JSP,Java等模板文件也是采用FreeMarker技术.
1.
在struts2中使用freemarker
普通的struts2配置文件一般是这么配置的:
<action name=“Action1“ class=“com.abc.Action1“> <result>/page.jsp</result> </action>
这里的view是一个jsp页面,也可以改成是一个freemarker模板页面:
<action name=”Action1″ class=”com.abc.Action1″> <result type=”freemarker”>/fm.ftl</result> </action>
当然我们希望能在fm.ftl上使用struts2的标签,需要在fm.ftl页面最开始添加对struts2标签的引用:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
引用前把struts2-core-2.0.x.x.jar包里的META-INF/struts-tags.tld 复制到 /WEB-INF/struts-tags.tld
默认是不支持JspTaglibs的引用的,这里还需要一个额外的配置,修改web.xml,添加如下内容:
<servlet> <servlet-name>JspSupportServlet</servlet-name> <servlet-class> org.apache.struts2.views.JspSupportServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet>
一个简单的fm.ftl文件的例子:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> <html> <head> <meta http-equiv=“Content-Type“ content=“text/html; charset=GB2312“> <title>Insert title here</title> </head> <body> <@s.form action=“Action1.action“> <@s.textfield name=“username“></@s.textfield> <@s.textfield name=“password“></@s.textfield> <@s.submit value=“提交“/> </@s.form> <br/>登录用户名:${username} </body> </html>
注意:struts2在freemarker页面中标签写法和jsp页面的写法不同,freemarker里是<@s.form>,jsp里是<s:form>,一定不要写错了!
使用时发现对中文的支持不好,显示时中文出现乱码,这里修改下struts.xml配置文件:
<constant name=”struts.i18n.encoding” value=”gb2312″ />
现在就可以在struts2中正常使用freemarker了!
自己的一个实例:
(1)在struts.xml添加跳转:
<package name="loginPackage" extends="jason-default"> <action name="jLogin" class="JLogin"> <result name="success" >/WEB-INF/jason/index.jsp</result> <result name="error">/WEB-INF/jason/login.jsp</result> <result name="input">/WEB-INF/jason/login.jsp</result> <result name="search" type="freemarker">/WEB-INF/templates/jsearch.ftl</result> <interceptor-ref name="jLoginStack"/> </action> </package>
(2)
在ACTION中,进行设置:
Hits hits = JLuceneUtils.luceneSearch(indexPath, searchMess); System.out.println("----------hits.length():" + hits.length()); for (int a = 0; a < hits.length(); a++) { Document doc2 = (Document) hits.doc(a); System.out.println(searchMess + "的值是:"+ doc2.get("confContext")); ActionContext.getContext().getSession().put("jsearch_value", doc2.get("confContext")); } ActionContext.getContext().getSession().put("jsearch_cout", hits.length()); ActionContext.getContext().getSession().put("jsearch_name", searchMess);
(3)
设置模板文件:jsearch.ftl:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jason search result</title> </head> <body> <table width="98%" border="0" align="center" cellpadding="5" cellspacing="0"> <tr> <td><strong>以面是jason用lucene查询的结果,共有${jsearch_cout}条符合:</strong></td> </tr> <tr> <#-- freemarker插值(如下,是利用EL语言,即将ACTION中的值先放入session/request/application) --> <td>查询内容:${jsearch_name} --- 查询值:${jsearch_value}</td> </tr> <tr> <td> <@s.url action="jLogin!login" id="login" /> <a href="${login}">返回登录主页</a> </td> </tr> </table> </body> </html>
(4)
如果要使用STRUTS2.0的标签,如上面.就要添加STRUTS2.0的标签库:
web.xml添加:
<servlet> <servlet-name>JspSupportServlet</servlet-name> <servlet-class> org.apache.struts2.views.JspSupportServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet>
在jsearch.ftl最前面添加:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
2,在java程序中使用FreeMarker
FreeMarker的模板就是一个.ftl文本文件,在该文件中使用了一些FreeMarker的特别标记,这些标记会动态显示,或者控制程序输出,如下面的模板文件代码:
${name},你好!${msg}
这里类似于${}的就是动态的内容,称作"插值".
为了使用FreeMarker来将数据模型中的值合并到模板文件中,可按如下步骤进行:
1,创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例
2,使用Configuration实例来生成Template实例,同进需要指定使用的模板文件
3,填充数据模型,数据模型就是一个Map对象
4,调用Template实例的process方法完成合并.
下面是一个使用FreeMarker创建输出的Java程序,程序源代码如下:
package lee; import java.util.*; import java.io.*; import freemarker.template.*; public class HelloFreeMarker { private Configuration cfg; public void init() throws Exception { //初始化FreeMarker配置 //创建一个Configuration实例 cfg = new Configuration(); //设置FreeMarker的模版文件位置 cfg.setDirectoryForTemplateLoading(new File("templates")); } public void process()throws Exception { Map root = new HashMap(); root.put("name", "FreeMarker!"); root.put("msg" , "您已经完成了第一个FreeMarker的示例"); Template t = cfg.getTemplate("test.ftl"); t.process(root, new OutputStreamWriter(System.out)); } public static void main(String[] args)throws Exception { HelloFreeMarker hf = new HelloFreeMarker(); hf.init(); hf.process(); } }
上面的代码创建了一个Map实例,这个Map将作为模板文件的数据模型,我们要使用FreeMarker必须导入freemarker.jar文件,FreeMarker的官网是http://freemarker.sourceforge.net/,虽然FreeMarker可以在Java程序中使用,但大部分时候还是用来生成HTML页面.
3,在Web应用中使用FreeMarker
在Web应用中使用FreeMarker跟在Java程序中使用并没有太大的区别.下面是是一个在Web中使用的例子,用来生成HTML页面的模板文件内容如下:
<html> <head> <title>FreeMarker的HelloWorld</title> </head> <body> ${message} </body> </html>
我们在Web应用中使用FreeMarker时,应该让Servlet来合并模板和数据,因此,Servlet负责创建Configuration实例,并负责合并模板和数据,下面是Servlet源代码:
package lee; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import freemarker.template.*; public class HelloServlet extends HttpServlet { private Configuration cfg; public void init() { //初始化FreeMarker配置 //创建一个Configuration实例 cfg = new Configuration(); //设置FreeMarker的模版文件位置 cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates"); } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //建立数据模型 Map root = new HashMap(); root.put("message", "Hello FreeMarker!"); //取得模版文件 Template t = cfg.getTemplate("test.ftl"); // 开始准备生成输出 // - 使用模版文件的charset作为本页面的charset // - 使用text/html MIME-type response.setContentType("text/html; charset=" + t.getEncoding()); Writer out = response.getWriter(); //合并数据模型和模版,并将结果输出到out中 try { t.process(root, out); } catch (TemplateException e) { throw new ServletException("处理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> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
4,FreeMarker的模板文件
从上面的例子可以看到FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:
1,文本:直接输出的部分
2,注释:<#-- ... -->格式部分,不会输出
3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出
4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出
下面是一个FreeMarker模板的例子,包含了以上所说的4个部分
<html><br> <head><br> <title>Welcome!</title><br> </head><br> <body><br> <#-- 注释部分 --><br> <#-- 下面使用插值 --> <h1>Welcome ${user} !</h1><br> <p>We have these animals:<br> <u1><br> <#-- 使用FTL指令 --> <#list animals as being><br> <li>${being.name} for ${being.price} Euros<br> <#list><br> <u1><br> </body><br> </html>
发表评论
-
Apache+Tomcat集群配置
2013-06-24 09:49 1203Tomcat 本文Apache+Tomcat集群 ... -
FusionCharts参数的详细说明和功能特性
2013-03-13 12:22 1125功能特性animation ... -
Tomcat中关于堆内存与永久区内存的设置
2011-12-12 13:49 26421.在tomcat (免安装版)文件夹下的bin文件夹下找 ... -
Tomcat内存溢出的原因 三个原因
2011-12-12 13:38 1642Tomcat内存溢出的原因 在生产环境中tomcat内存 ... -
xml中大于、小于等特殊字符处理
2011-10-11 09:57 2897可以用下面这种写法转义 < ... -
J2EE里面使用freemark技术
2011-09-15 09:46 1545模板技术在现代的软件 ... -
java乱码问题
2011-09-01 09:44 3218Java中乱码问题很常见,原因也多种多样,这里做一个总结,不求 ... -
ognl表达式入门应用
2011-08-30 17:12 1537package foo.test; public cla ... -
XFire建立webservice服务和客户端
2011-08-15 15:50 1748XFire 是与Axis 2并列的新一代Web Service ... -
字符编码过滤器的一般写法
2011-08-04 16:24 1150今天研究别人的代码的时候突然发现spring的org.spri ... -
struts2的日期date格式化(3种)
2011-08-02 09:27 2638在直接<s:textfield中也要日期格式化,平时使用 ... -
j2ee获取客户端参数集
2011-07-07 18:28 1621Java代码 package javacommon.u ... -
HttpURLConnection发送文件
2011-07-05 10:16 2437Java代码 URL url = new URL( ... -
tomcat部署get请求乱码问题解决方法
2011-06-13 18:06 1886默认情况下,Tomcat对请求采用的默认编码是ISO-8859 ... -
Tomcat:IOException while loading persisted sessions: java.io.EOFException
2011-06-13 15:56 1603一直用tomcat一段时间都一切正常,最近一次启动tomcat ... -
jsp打印问题
2011-04-07 15:58 3056jsp打印问题 回复于 2006-01-06 22:43:45 ... -
ssh分页(多个例子)
2011-03-31 17:50 3284先是一个page的bean: Java代码 package ... -
分页标签:pager-taglib使用指南
2011-01-26 18:07 1558一简介, Pager-taglib,支持多种风格的分页显示。 ... -
jstl 遍历集合
2011-01-26 16:02 5078<%@ page language="java ... -
使用 HibernateTemplate 实现分页查询
2011-01-24 23:28 20423/*** 使用hql 语句进行操作 * @param hql ...
相关推荐
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。... FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库 FreeMarker是免费的
如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示.该属性只接受true和flase两个值,该属性的 默认值是false.通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false. ...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的...FreeMarker同样可以应用于非Web应用程序环境 FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库 FreeMarker是免费的
1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 ...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
文件内不仅内含jsp、jstl、struts1、struts2、jsf、freemarker、spring、velocity等常用标签,而且更含有JavaScript和Ajax常用函数的说明和实例。
书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。书中...
该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...