- 浏览: 641666 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liuche20083736:
非常好
从问题看本质: 研究TCP close_wait的内幕 -
xiaopohai85707:
优化算法与原来需求不符
过滤字符的性能调优?挤一挤还是有的 -
kmy_白衣:
生成的area图有时候 标签的数值和图标上看上去的数值不一致。 ...
OpenFlashChart2之恶心文档 -
tom&jerry:
大神,请教一个问题,按名称排序为何无效,用的2.4.3 XPA ...
深入浅出jackrabbit之十三 查询之AST和QT -
jd2bs:
改成精确匹配可以了< filter-mapping &g ...
细谈Ehcache页面缓存的使用
/**
*作者:张荣华(ahuaxuan)
*2007-04-16
*转载请注明出处及作者
*/
模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选择使用freemarker或velocity作为view,模板技术作为view的好处是很多,尤其和jsp比较起来优点更大,众所周知jsp需要在第一次被执行的时候编译成servlet,那么这个过程是很慢的,当然很多应用服务器都提供预编译的功能,但是在开发的时候仍然给我们程序员带来了很多痛苦,每次修改都要多几秒钟,那在一天的开发中就有很多时间浪费在jsp的编译上了。用webwork in action的作者的话来说:“每次修改之后重新运行都要等等几秒是令人失望的,而频繁地修改jsp更是会令你的失望情绪变本加厉“。我们把模板技术引入到view中去可以带来更好的开发效率,而且模板的速度要比jsp快(虽然编译过后的jsp在速度上已经满足我的需求了,呵呵)。 当然模板技术可以用在很多领域,可不只在view那里。我们可以通过模板技术来生成xml,生成jsp,生成java文件等等,说到这里,大家通常会使用模板技术用在公司的框架里,这样就可以很快速的生成添删改查的代码,需要的只是模板,其他比如还有邮件模板等等。
以上是模板的作用,当然模板还有其他领域的应用,希望能和大家多讨论,提高我们的生产效率。
那么现在开源的模板技术有好几种,多了之后就有一个选择的问题了,如何选择一个满足自己需要的模板的呢,我大概了看了一下两种模板技术,写了一个例子,我使用了几种设计模式来完成了这个例子,这个例子中,我同时使用了freemarker和velocity,这样同学们可以通过代码很直观的比较两种模板技术,通过这个例子,我认识到freemarker在功能上要比velocity强大
1在view层的时候,它提供了format日期和数字的功能,我想大家都有在页面上format日期或数字的经验,用jsp的同学可能对jstl的fmt标签很有感情,使用了freemarker之后也可以使用freemarker提供的功能来formmat日期和数据,这个功能我想是很贴心的
2通过我的使用我发现freemaker的eclipseplugin要比velocity的eclipseplugin好,如果你是用idea那很遗憾,我没有找到类似的插件。好在很多地方呢,我看到的是freemarker的插件除了支持freemarker语法也支持html语句,而velocity的插件貌似只支持velocity的语法,html就只是用普通的文本来显示了,在这一点上freemarker占上风了(不要和我说高手都是用windows记事本之类的话,这本来就违背了模板技术的初衷)
3freemarker对jsptag的支持很好,算了,不到迫不得已还是不要这样做吧。
还有就是两者的语法格式,这一点上不同的人有不同倾向
下面就介绍一下这个例子吧
工厂类,用来得到模板引擎
这个是freemarker实现
以下是模板
1,freemarker模板
2,velocity模板
至此整个例子就结束了,以上只是最简单的介绍,当然这两种技术还有待我们的深入研究。这个例子只不过是比较直观的表现两种技术的使用而已
而且如果想学习方法模板模式和工厂模式的同学可以下载代码看看
作者:张荣华,未经作者同意不得随意转载!
你认为jsp中随意加入java代码是jsp的优点?那要tag做什么
你认为在jsp中随意调用某个类是jsp的优点?那要mvc做什么
你认为在jsp中实现业务逻辑是jsp的优点?那要代码结构分层做什么
总结那要mvc,orm,spring(ejb)做什么
我们就是要往更好的方向发展,往更规范的方向发展,往更可扩展性,可维护性的方向发展
jsp在被解析成JspServlet的时候你可以忽略不计吗?这个在开发里很重要,就是修改页面后能立刻体现出来
你在说使用jsp吗,模板就是来终结jsp的,在模板里搞变量定义,条件判断,肯定比jsp来的快,不管是开发效率还是运行效率都是这样,难道你喜欢在页面上搞一堆又一堆的tag吗,还是在页面上搞一堆又一堆的java代码?
确实是这样的,这个是freemarker功能更强大的地方,而且我十分不喜欢velocity的那种语法,太随便了,容易出错
你是在说笑吧
不会啊,新闻系统中生成静态页面后就不管模板引擎的事情了,接下来就靠servlet容器或apache直接解析html页面了,模板引擎只管生成静态页面,所以这个不算view层的应用哦
你说的没错,用在view层的时候,很多web框架都有很好的支持,但是我想讨论得更多,因为模板技术的价值不只在view层,很多地方都可以用,比如在新闻系统中生成静态页面等等,还有我上面提到的等等
另外,貌似FREEMAKER是有BUG的。我没用过,知道的朋友请来说一下。
大多数框架都是有bug的,关键看这个bug是否对你有影响了,webwork2开始就以freemarker作模板了,现在的struts2.0也是的
*作者:张荣华(ahuaxuan)
*2007-04-16
*转载请注明出处及作者
*/
模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选择使用freemarker或velocity作为view,模板技术作为view的好处是很多,尤其和jsp比较起来优点更大,众所周知jsp需要在第一次被执行的时候编译成servlet,那么这个过程是很慢的,当然很多应用服务器都提供预编译的功能,但是在开发的时候仍然给我们程序员带来了很多痛苦,每次修改都要多几秒钟,那在一天的开发中就有很多时间浪费在jsp的编译上了。用webwork in action的作者的话来说:“每次修改之后重新运行都要等等几秒是令人失望的,而频繁地修改jsp更是会令你的失望情绪变本加厉“。我们把模板技术引入到view中去可以带来更好的开发效率,而且模板的速度要比jsp快(虽然编译过后的jsp在速度上已经满足我的需求了,呵呵)。 当然模板技术可以用在很多领域,可不只在view那里。我们可以通过模板技术来生成xml,生成jsp,生成java文件等等,说到这里,大家通常会使用模板技术用在公司的框架里,这样就可以很快速的生成添删改查的代码,需要的只是模板,其他比如还有邮件模板等等。
以上是模板的作用,当然模板还有其他领域的应用,希望能和大家多讨论,提高我们的生产效率。
那么现在开源的模板技术有好几种,多了之后就有一个选择的问题了,如何选择一个满足自己需要的模板的呢,我大概了看了一下两种模板技术,写了一个例子,我使用了几种设计模式来完成了这个例子,这个例子中,我同时使用了freemarker和velocity,这样同学们可以通过代码很直观的比较两种模板技术,通过这个例子,我认识到freemarker在功能上要比velocity强大
1在view层的时候,它提供了format日期和数字的功能,我想大家都有在页面上format日期或数字的经验,用jsp的同学可能对jstl的fmt标签很有感情,使用了freemarker之后也可以使用freemarker提供的功能来formmat日期和数据,这个功能我想是很贴心的
2通过我的使用我发现freemaker的eclipseplugin要比velocity的eclipseplugin好,如果你是用idea那很遗憾,我没有找到类似的插件。好在很多地方呢,我看到的是freemarker的插件除了支持freemarker语法也支持html语句,而velocity的插件貌似只支持velocity的语法,html就只是用普通的文本来显示了,在这一点上freemarker占上风了(不要和我说高手都是用windows记事本之类的话,这本来就违背了模板技术的初衷)
3freemarker对jsptag的支持很好,算了,不到迫不得已还是不要这样做吧。
还有就是两者的语法格式,这一点上不同的人有不同倾向
下面就介绍一下这个例子吧
/** * * @author 张荣华 * 转载请注明出处 */ public class TemplateTest { /** * @param args */ public static void main(String[] args) throws Exception{ /* 准备数据 */ Map latest = new HashMap(); latest.put("url", "products/greenmouse.html"); latest.put("name", "green mouse"); Map root = new HashMap(); root.put("user", "Big Joe"); root.put("latestProduct", latest); root.put("number", new Long(2222)); root.put("date",new Date()); List listTest = new ArrayList(); listTest.add("1"); listTest.add("2"); root.put("list",listTest); TemplateEngine freemarkerEngine = (TemplateEngine)TemplateFactory.getInstance().getBean("freemarker"); freemarkerEngine.run(root);//使用freemarker模板技术 TemplateEngine velocityEngine = (TemplateEngine)TemplateFactory.getInstance().getBean("velocity"); velocityEngine.run(root);//使用velocity模板技术 } }
工厂类,用来得到模板引擎
/** * * @author 张荣华 * 转载请注明出处 */ public class TemplateFactory { private static TemplateFactory instance; private Map objectMap; static{ instance = new TemplateFactory(); } public TemplateFactory() { super(); this.objectMap = new HashMap(); synchronized (this) { objectMap.put("freemarker", new FreemarkerTemplateEngine(){ public String getTemplatePath() { return "template"; } }); objectMap.put("velocity", new VelocityTemplateEngine()); } } public static TemplateFactory getInstance(){ return instance; } /** * 模仿spring的工厂 * @param beanName * @return */ public Object getBean(String beanName){ return objectMap.get(beanName); } }引擎接口
/** * * @author 张荣华 * 转载请注明出处 */ public interface TemplateEngine { void run(Map context)throws Exception; }模板引擎的实现使用method template模式,因为有两个实现,这两个实现又存在公共的逻辑,所以选择了这个模式
/** * * @author 张荣华 * 转载请注明出处 */ public abstract class AbstractTemplateEngine implements TemplateEngine{ public abstract String getTemplatePath(); public abstract String getTemplate(); public abstract String getEngineType(); public void run(Map context)throws Exception{ if(Constants.ENGINE_TYPE_FREEMARKER.equals(getEngineType())) executeFreemarker(context); else executeVelocity(context); } private void executeFreemarker(Map context)throws Exception{ Configuration cfg = new Configuration(); cfg.setDirectoryForTemplateLoading( new File(getTemplatePath())); cfg.setObjectWrapper(new DefaultObjectWrapper()); cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250)); Template temp = cfg.getTemplate(getTemplate()); Writer out = new OutputStreamWriter(System.out); temp.process(context, out); out.flush(); } private void executeVelocity(Map root)throws Exception{ Velocity.init(); VelocityContext context = new VelocityContext(root); org.apache.velocity.Template template = null; template = Velocity.getTemplate(getTemplatePath()+getTemplate()); StringWriter sw = new StringWriter(); template.merge( context, sw ); System.out.print(sw.toString()); } }
这个是freemarker实现
/** * * @author 张荣华 * 转载请注明出处 */ public class FreemarkerTemplateEngine extends AbstractTemplateEngine{ private static final String DEFAULT_TEMPLATE = "FreemarkerExample.ftl"; /** * 这个方法应该实现的是读取配置文件 */ public String getTemplatePath() { return null; } public void run(Map root) throws Exception{ super.run(root); } public String getTemplate() { // TODO Auto-generated method stub return DEFAULT_TEMPLATE; } public String getEngineType() { return Constants.ENGINE_TYPE_FREEMARKER; } }这个是velocity实现
/** * * @author 张荣华 * 转载请注明出处 */ public class VelocityTemplateEngine extends AbstractTemplateEngine{ private static final String DEFAULT_TEMPLATE = "VelocityExample.vm"; public String getTemplatePath() { return "/template/"; } public void run(Map map) throws Exception{ super.run(map); } public String getTemplate() { // TODO Auto-generated method stub return DEFAULT_TEMPLATE; } public String getEngineType() { // TODO Auto-generated method stub return Constants.ENGINE_TYPE_VELOCITY; } }
以下是模板
1,freemarker模板
freemarker template test: string test-----------${user}-----------${number}-----------${latestProduct.url}-----------${latestProduct.name} condition test----------- <#if user == "Big Joe"> list iterator----------- <#list list as aa> ${aa} </#list> </#if> date test-----------${date?string("MMM/dd/yyyy")}
2,velocity模板
****************************************************************************************************************** velocity template test: string test-----------${user}-----------${number}-----------${latestProduct.url}-----------${latestProduct.name} condition test----------- #if ($user == "Big Joe") list iterator----------- #foreach( $aa in $list ) $aa #end #end date test-----------${date}
至此整个例子就结束了,以上只是最简单的介绍,当然这两种技术还有待我们的深入研究。这个例子只不过是比较直观的表现两种技术的使用而已
而且如果想学习方法模板模式和工厂模式的同学可以下载代码看看
作者:张荣华,未经作者同意不得随意转载!
- template.rar (2.1 MB)
- 描述: 可运行代码
- 下载次数: 3275
评论
21 楼
ddandyy
2007-05-18
确实 jsp里写java已经早被公司明令禁止了
写起来很爽 不利于维护 而且影响速度
写起来很爽 不利于维护 而且影响速度
20 楼
ahuaxuan
2007-05-18
sg552 写道
模板建立的出发点,只是为了生成代码。从这个角度讲,模板怎么发展,也达不到JSP的目的。
从功能上说,JSP要远强大于模板。在JSP中,可以随意的加入JAVA代码。模板可以吗?我想在JSP中调用某个类,想用就用。VELOCITY可以吗? JSP中可以随意的实现种种逻辑,基本就是.java文件的B/S版。模板可以吗?
从速度上说,模板比JSP速度快?都是同一种语言,难道有不同的速度吗? <% System.out.println("hello, world!") %> 与
#set($a="hello world") $a 不都是最终转换成同样的核心语句吗?要说JSP慢,那是因为它存在于WEB-INF之外,JSP 容器第一次加载时需要将JSP转换成JAVA的时间。之后速度跟JAVA代码一样。模板速度快?有具体数据吗?(别人都说C比JAVA快,后来不是有了个测试数据,JAVA很多地方都朝过了C/C++!用数据说话才对)
上班中不好发言,总之,是JSP 被 模板终结, 还是 模板 没落, 我们拭目以待。
从功能上说,JSP要远强大于模板。在JSP中,可以随意的加入JAVA代码。模板可以吗?我想在JSP中调用某个类,想用就用。VELOCITY可以吗? JSP中可以随意的实现种种逻辑,基本就是.java文件的B/S版。模板可以吗?
从速度上说,模板比JSP速度快?都是同一种语言,难道有不同的速度吗? <% System.out.println("hello, world!") %> 与
#set($a="hello world") $a 不都是最终转换成同样的核心语句吗?要说JSP慢,那是因为它存在于WEB-INF之外,JSP 容器第一次加载时需要将JSP转换成JAVA的时间。之后速度跟JAVA代码一样。模板速度快?有具体数据吗?(别人都说C比JAVA快,后来不是有了个测试数据,JAVA很多地方都朝过了C/C++!用数据说话才对)
上班中不好发言,总之,是JSP 被 模板终结, 还是 模板 没落, 我们拭目以待。
你认为jsp中随意加入java代码是jsp的优点?那要tag做什么
你认为在jsp中随意调用某个类是jsp的优点?那要mvc做什么
你认为在jsp中实现业务逻辑是jsp的优点?那要代码结构分层做什么
总结那要mvc,orm,spring(ejb)做什么
我们就是要往更好的方向发展,往更规范的方向发展,往更可扩展性,可维护性的方向发展
jsp在被解析成JspServlet的时候你可以忽略不计吗?这个在开发里很重要,就是修改页面后能立刻体现出来
19 楼
sg552
2007-05-18
模板建立的出发点,只是为了生成代码。从这个角度讲,模板怎么发展,也达不到JSP的目的。
从功能上说,JSP要远强大于模板。在JSP中,可以随意的加入JAVA代码。模板可以吗?我想在JSP中调用某个类,想用就用。VELOCITY可以吗? JSP中可以随意的实现种种逻辑,基本就是.java文件的B/S版。模板可以吗?
从速度上说,模板比JSP速度快?都是同一种语言,难道有不同的速度吗? <% System.out.println("hello, world!") %> 与
#set($a="hello world") $a 不都是最终转换成同样的核心语句吗?要说JSP慢,那是因为它存在于WEB-INF之外,JSP 容器第一次加载时需要将JSP转换成JAVA的时间。之后速度跟JAVA代码一样。模板速度快?有具体数据吗?(别人都说C比JAVA快,后来不是有了个测试数据,JAVA很多地方都朝过了C/C++!用数据说话才对)
上班中不好发言,总之,是JSP 被 模板终结, 还是 模板 没落, 我们拭目以待。
从功能上说,JSP要远强大于模板。在JSP中,可以随意的加入JAVA代码。模板可以吗?我想在JSP中调用某个类,想用就用。VELOCITY可以吗? JSP中可以随意的实现种种逻辑,基本就是.java文件的B/S版。模板可以吗?
从速度上说,模板比JSP速度快?都是同一种语言,难道有不同的速度吗? <% System.out.println("hello, world!") %> 与
#set($a="hello world") $a 不都是最终转换成同样的核心语句吗?要说JSP慢,那是因为它存在于WEB-INF之外,JSP 容器第一次加载时需要将JSP转换成JAVA的时间。之后速度跟JAVA代码一样。模板速度快?有具体数据吗?(别人都说C比JAVA快,后来不是有了个测试数据,JAVA很多地方都朝过了C/C++!用数据说话才对)
上班中不好发言,总之,是JSP 被 模板终结, 还是 模板 没落, 我们拭目以待。
18 楼
ddandyy
2007-05-18
lss就算是说得没有道理 不过也是一种看法
不应该被隐
velocity前段时间遇到一个他很讨厌的地方 if (3 > $aa + $bb) 不支持
希望在新版本里会做掉他吧
不应该被隐
velocity前段时间遇到一个他很讨厌的地方 if (3 > $aa + $bb) 不支持
希望在新版本里会做掉他吧
17 楼
ahuaxuan
2007-05-18
sg552 写道
Velocity 只是一个模板工具, 80%时间里 ,都作为一个View的角色,使用 $变量 就行了。
如果想镶嵌太多的 条件判断,变量定义, 逻辑运算, 不如使用ASP,JSP啊。
如果想镶嵌太多的 条件判断,变量定义, 逻辑运算, 不如使用ASP,JSP啊。
你在说使用jsp吗,模板就是来终结jsp的,在模板里搞变量定义,条件判断,肯定比jsp来的快,不管是开发效率还是运行效率都是这样,难道你喜欢在页面上搞一堆又一堆的tag吗,还是在页面上搞一堆又一堆的java代码?
16 楼
sg552
2007-05-18
Velocity 只是一个模板工具, 80%时间里 ,都作为一个View的角色,使用 $变量 就行了。
如果想镶嵌太多的 条件判断,变量定义, 逻辑运算, 不如使用ASP,JSP啊。
如果想镶嵌太多的 条件判断,变量定义, 逻辑运算, 不如使用ASP,JSP啊。
15 楼
sg552
2007-05-18
呵呵。。。。 我的英文名也是Ray
14 楼
ahuaxuan
2007-05-18
ray_linn 写道
更正一下,由于年老体弱,我对Velocity Macro说的是不对的,应该是FreeMarker具有强大的新XML转换能力,使得替代XSLT成为可能,Velocity不具备这个功能。
http://freemarker.sourceforge.net/fmVsVel.html
http://freemarker.sourceforge.net/fmVsVel.html
确实是这样的,这个是freemarker功能更强大的地方,而且我十分不喜欢velocity的那种语法,太随便了,容易出错
13 楼
ray_linn
2007-05-18
更正一下,由于年老记忆力衰退,我对Velocity Macro说的是不对的。
刚翻了一下自己的blog, 我个人认为FreeMarker胜过Velocity的地方:
1. FreeMarker具有强大的宏指令:nested,可以在Freemarker里头使用类似闭包的功能,因此FreeMarker的宏远比Velocity强大而且简单。
2. 超强XML转换能力,使得替代XSLT成为可能,Velocity不具备这个功能。
3. FreeMarker隔离性更好,不能访问servlet API。
更全面的比较见:
http://freemarker.sourceforge.net/fmVsVel.html
刚翻了一下自己的blog, 我个人认为FreeMarker胜过Velocity的地方:
1. FreeMarker具有强大的宏指令:nested,可以在Freemarker里头使用类似闭包的功能,因此FreeMarker的宏远比Velocity强大而且简单。
2. 超强XML转换能力,使得替代XSLT成为可能,Velocity不具备这个功能。
3. FreeMarker隔离性更好,不能访问servlet API。
更全面的比较见:
http://freemarker.sourceforge.net/fmVsVel.html
12 楼
ahuaxuan
2007-05-18
ray_linn 写道
velocity没有macro,这点比freemarker差多了,而且才是二者差别最显著的地方。
你是在说笑吧
11 楼
sg552
2007-05-18
汗楼上的。。。。。。5个星星怎么来的?羡慕吖...
velocity macro 教程,请看这里:
http://velocity.apache.org/engine/devel/user-guide.html#velocimacros
关于velocity macro的使用,请参考 rollerblog. 谢谢。
velocity macro 教程,请看这里:
http://velocity.apache.org/engine/devel/user-guide.html#velocimacros
关于velocity macro的使用,请参考 rollerblog. 谢谢。
10 楼
ray_linn
2007-05-18
velocity没有macro,这点比freemarker差多了,而且才是二者差别最显著的地方。
9 楼
sg552
2007-05-18
我觉得各个技术都有自己的最适合位置。
在根据模板生成代码方面,velocity, freemaker确实很强。 从apache的顶级子项目来看, velocity要比freemaker有前途。
在事件响应的方面,JSF, Tapestry 也确实做的比较好。JSF是SUN的官方首推,Tapestry也是apache的顶级子项目,它们都有支持。
但是如果要说 Velocity , Freemaker 将取代JSP的地位,我不敢苟同。我认为就连JSF, tapestry 也无法动摇JSP的地位。 上面四种技术,虽然我不精通,但都有使用经验。我的感觉是:
velocity, freemaker, 用来生成工作代码,尤其是JSP代码,很方便。另外使用的时候,需要遵循“非常严格”的MVC。JSF,Tapestry适合那些习惯于C/S或者桌面应用开发的程序员,完全可以不懂HTML,就能使用组件。我的感觉,是对JSP的一个大补丁。
话题回来,我的意见是:想做好B/S系统,JSP是绝对的武功正宗,潜心修炼是没错的。v, m ,jsf, t 和林林种种其他功夫,作为辅助效果不错,但优势只是一时,越是用到后来,越是难以修炼。
ss菜鸟刚飞,一家之言,请各位前辈多多批评!
在根据模板生成代码方面,velocity, freemaker确实很强。 从apache的顶级子项目来看, velocity要比freemaker有前途。
在事件响应的方面,JSF, Tapestry 也确实做的比较好。JSF是SUN的官方首推,Tapestry也是apache的顶级子项目,它们都有支持。
但是如果要说 Velocity , Freemaker 将取代JSP的地位,我不敢苟同。我认为就连JSF, tapestry 也无法动摇JSP的地位。 上面四种技术,虽然我不精通,但都有使用经验。我的感觉是:
velocity, freemaker, 用来生成工作代码,尤其是JSP代码,很方便。另外使用的时候,需要遵循“非常严格”的MVC。JSF,Tapestry适合那些习惯于C/S或者桌面应用开发的程序员,完全可以不懂HTML,就能使用组件。我的感觉,是对JSP的一个大补丁。
话题回来,我的意见是:想做好B/S系统,JSP是绝对的武功正宗,潜心修炼是没错的。v, m ,jsf, t 和林林种种其他功夫,作为辅助效果不错,但优势只是一时,越是用到后来,越是难以修炼。
ss菜鸟刚飞,一家之言,请各位前辈多多批评!
8 楼
ahuaxuan
2007-04-23
wensky222 写道
新闻系统中生成静态页面,我怎么看也是在view层的应用呢
不会啊,新闻系统中生成静态页面后就不管模板引擎的事情了,接下来就靠servlet容器或apache直接解析html页面了,模板引擎只管生成静态页面,所以这个不算view层的应用哦
7 楼
wensky222
2007-04-23
新闻系统中生成静态页面,我怎么看也是在view层的应用呢
模板的编辑一般都比较简单,只提供数据的合成,最难在调试上
模板在iew层上不能直接看到真是的效果,要是有填充数据,或支持直接预览就方便多了
模板的编辑一般都比较简单,只提供数据的合成,最难在调试上
模板在iew层上不能直接看到真是的效果,要是有填充数据,或支持直接预览就方便多了
6 楼
ahuaxuan
2007-04-23
ddandyy 写道
另外 velocity的调用不用你那么麻烦的 你这个例子明显复杂了很多 一般只有在不返回页面 用到他的模板功能的时候才这么用
如果当成一个页面来写 完全不至于写成这样
如果当成一个页面来写 完全不至于写成这样
你说的没错,用在view层的时候,很多web框架都有很好的支持,但是我想讨论得更多,因为模板技术的价值不只在view层,很多地方都可以用,比如在新闻系统中生成静态页面等等,还有我上面提到的等等
5 楼
ddandyy
2007-04-23
另外 velocity的调用不用你那么麻烦的 你这个例子明显复杂了很多 一般只有在不返回页面 用到他的模板功能的时候才这么用
如果当成一个页面来写 完全不至于写成这样
如果当成一个页面来写 完全不至于写成这样
4 楼
ddandyy
2007-04-23
velocity也是可以format数字 日期嘛 好像要自己写了 没找过 不清楚
至于第2点 呵呵.......... 各有所好吧 作为一个优缺点来说好像有点不适合
一直用emeidt写这东西 颜色嘛 随便改了
不知道ECLIPSE的插件除了变色还有啥功能 有自动完成么? 如果有的话还算是有点吸引力 他的文本编辑功能太弱了
velocity最讨厌的一点是代码写错的时候debug比较困难
freemarker没用过 不评价
至于第2点 呵呵.......... 各有所好吧 作为一个优缺点来说好像有点不适合
一直用emeidt写这东西 颜色嘛 随便改了
不知道ECLIPSE的插件除了变色还有啥功能 有自动完成么? 如果有的话还算是有点吸引力 他的文本编辑功能太弱了
velocity最讨厌的一点是代码写错的时候debug比较困难
freemarker没用过 不评价
3 楼
ahuaxuan
2007-04-23
sg552 写道
另外,貌似FREEMAKER是有BUG的。我没用过,知道的朋友请来说一下。
大多数框架都是有bug的,关键看这个bug是否对你有影响了,webwork2开始就以freemarker作模板了,现在的struts2.0也是的
2 楼
sg552
2007-04-16
楼主辛苦了。
不过我更喜欢Velocity
不说它已经是APACHE的顶级项目,
我很喜欢它不支持HTML标签这个做法,可以让我更方便的生成JSP页面。呵呵。。。
另外,貌似FREEMAKER是有BUG的。我没用过,知道的朋友请来说一下。
不过我更喜欢Velocity
不说它已经是APACHE的顶级项目,
我很喜欢它不支持HTML标签这个做法,可以让我更方便的生成JSP页面。呵呵。。。
另外,貌似FREEMAKER是有BUG的。我没用过,知道的朋友请来说一下。
发表评论
-
过滤字符的性能调优?挤一挤还是有的
2010-05-29 05:54 3620/* *auth ... -
Master-Slave,Spring,Hibernate,故事曲折离奇,情结跌宕起伏
2009-02-05 13:49 8721/** *作者:张荣华 *日期 ... -
弃成见,反省,并重新认识struts.i18n.encoding
2008-12-24 15:42 3910[size=medium]之前和大家讨论了struts2.0中 ... -
关键字:查询,事务,粒度
2008-08-22 17:05 5159[size=medium]/** *作者: ... -
看看mina和memcached的联姻(适合不同语言客户端,高并发?)
2008-07-21 17:06 8025[size=medium]/** * 作者:张荣华 * 日 ... -
如何解决mysql的master-slave模式中ReplicationDriver的使用问题
2008-06-19 18:23 8237/** * 作者:张荣华 * 日期:2008-6-19 ... -
别装了,难道你们不想把properties直接注入到object中去(spring-plugin)?
2008-04-09 18:01 3669[size=small]/** *作者:张荣华(ahuaxu ... -
用jamon来监控你的sql执行效率
2008-02-25 15:48 3729/** *作者:张荣华 *日期:2008-2-25 ... -
java同msn的通信,大家想想用途吧
2007-11-24 17:14 2530程序员的生活真是单调,除了编程还是编程,工作日 ... -
EAI企业应用集成场景及解决方案
2007-09-21 18:21 3164/** *作者:张荣华(ahuaxuan) *2007-9 ... -
quartz和应用的集群问题
2007-08-21 18:36 12835之前看到很多关于quartz的讨论,尤其是关于quar ... -
优化程序之前,可用Jamon来监测你的Spring应用
2007-08-14 18:14 8167/** *作者:张荣华(ahuaxuan) *2007-8-1 ... -
请问责任链真的是一种设计模式吗
2007-07-26 18:12 9460坛子上讨论设计模式的也挺多的,但是关于这个责任链模式还没有人提 ... -
把ActiveMQ的控制台整合到你的web程序中
2007-07-19 12:06 8876在使用ActiveMQ的时候把ActiveMQ的控制台整 ... -
设计模式之:解剖观察者模式
2007-07-17 16:12 6896[size=9] 论坛上很多人都 ... -
java邮件:在简单和复杂之间的方案
2007-07-11 18:07 7595/** *作者:张荣华(ahuaxu ... -
强强连手, 在模板中分页,看Freemarker和displaytag的结合
2007-07-09 09:22 6936/** *作者:张荣华(ahuaxuan) *2007-0 ... -
解惑:在spring+hibernate中,只读事务是如何被优化的。
2007-06-28 18:22 7633/** *作者:张荣华(ahuaxuan) *2007- ... -
让webwork零配置 第二章(实现)(实例已放出,大家可以下载运行)
2007-06-25 09:23 5731/** *作者:张荣华(ahuaxuan) *2007-0 ... -
让webwork2零配置,第一章(主贴再次更新)
2007-06-18 15:41 13435/** *作者:张荣华(ahuaxuan) *2007-0 ...
相关推荐
以上是对Velocity和FreeMarker的基本介绍和比较,它们都是Java Web开发中的重要工具,理解它们的特性和应用场景有助于选择最适合项目的技术栈。对于标签“源码”和“工具”,我们可以进一步研究这两个模板引擎的源...
在众多模板引擎中,Velocity和FreeMarker是两种非常受欢迎的选择。下面我们将从多个方面对这两种模板引擎进行详细的比较。 #### 一、简介 - **Velocity**:是一个基于Java的模板引擎,它允许开发者使用简单的模板...
本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及Velocity,并对它们进行深入比较。 #### JSP (Java Server Pages) JSP是一种基于Java技术的服务器端动态网页技术,通过在...
本篇文章将对四个流行的Java模板引擎——Velocity、FreeMarker、Smarty4j以及HTTL进行效率分析,旨在探讨它们在处理业务逻辑编译和性能方面的优劣。 1. Velocity: Velocity是Apache软件基金会的一个开源项目,以其...
Freemarker和Velocity是两种广泛使用的模板引擎,它们在Java Web开发中扮演着重要的角色,主要用于生成动态HTML或其他格式的文本。这两者都是基于MVC(Model-View-Controller)设计模式,允许开发者将业务逻辑与展示...
虽然Velocity和Freemarker都是视图模板引擎,但它们有各自的特性和优缺点: 1. **语法简洁性**:Freemarker的语法可能更为简洁,如其使用`<#if>`、`<#foreach>`等,而Velocity则使用`#if`、`#foreach`。 2. **灵活...
Velocity、Freemarker和Thymeleaf都是Java领域的模板引擎,它们各有特点。Freemarker语法更为复杂,但功能更强大;Thymeleaf强调的是XML友好的语法,更适合静态页面的生成。Velocity则以其简洁和易用性受到许多...
- **include与parse**:为了实现页面布局的模块化,Velocity提供了`#include`和`#parse`两种方式来引入其他模板文件。`#include`主要用于简单地插入另一个文件的内容而不执行其中的Velocity语法;`#parse`则不仅会...
例如,Freemarker插件可以帮助快速定位模板中的语法错误,而Velocity插件则可以提供模板变量和方法的智能提示,减少出错的可能性。 总的来说,Freemarker和Velocity的Eclipse插件对于Java Web开发者来说是必不可少...
标题 "大型商城网站springmvc+freemarker+velocity+ibatis" 暗示了这是一个基于SpringMVC、Freemarker、Velocity和iBatis框架构建的电子商务平台。这个项目可能是一个B2C(Business-to-Consumer)类型的商城,允许...
Velocity和FreeMarker是两种常用的Java模板引擎,它们可以方便地结合JSP(JavaServer Pages)进行动态网页生成,并实现页面静态化。本文将详细介绍如何使用Velocity和FreeMarker模板实现页面静态化,并提供具体的...
4. **Freemarker**: 虽然Velocity和Freemarker都是模板引擎,但它们各有特点,可以根据项目需求选择合适的工具。 总之,Velocity作为一款强大的模板引擎,对于Web开发中的前后端分离有着重要作用,它的简单性和灵活...
这个压缩包提供的就是一套基于Freemarker模板的代码生成器模板文件,分别对应控制器(Controller)、实体类(Bean)、服务接口(Service)和服务实现(ServiceImpl)、数据访问对象(Dao)。 1. **Controller.ftl**...
在这个话题中,我们将深入探讨SpringMVC与两种常用的模板引擎——Velocity和FreeMarker的集成与应用。 首先,让我们了解SpringMVC的基本架构。在SpringMVC中,DispatcherServlet是入口点,它负责接收HTTP请求并根据...
Velocity是一个开源的Java模板引擎,它允许开发者将HTML与Java代码分离,使Web开发者...对于新项目,考虑使用更新的版本(如Velocity 2.x)或者其他的模板引擎,如FreeMarker或Thymeleaf,可能会带来更多的优势和功能。
Velocity与JSP、FreeMarker等其他模板引擎相比,有其独特优势。Velocity的语法简洁,更接近自然语言,且由于它不支持脚本,避免了在模板中引入过多的业务逻辑,使得模板更加纯粹。此外,Velocity的性能也相对较高,...
综上所述,FreeMarker作为一个强大的模板引擎,提供了丰富的模板语言和灵活的数据模型,是Web开发中的有力工具。尽管Velocity等其他工具也有其优点,但FreeMarker的广泛特性和强大功能使其在许多场景下成为更优选择...
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,仅是利用模板加上数据生成文本页面,即是由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,并可以在模板中使用...