package com.jh.core.util;
import java.io.StringWriter;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import com.jh.app.util.Globle;
public class VelocityUtil
{
static VelocityEngine ve=null;
public static VelocityEngine velocity()
{
if(ve!=null){
return ve;
}
ve = new VelocityEngine();
Properties p = new Properties();
p.setProperty(Velocity.RUNTIME_LOG, "velocity_jh.log");
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, Globle.VM_PATH);
try
{
ve.init(p);
}
catch(Exception e)
{
e.printStackTrace();
}
return ve;
}
public static void main(String args[])
{
try
{
Velocity.init();
}
catch(Exception e)
{
System.out.println("Problem initializing Velocity : " + e);
return;
}
VelocityContext context = new VelocityContext();
TTT tt= new TTT();
tt.setSs("vvvvvvvv");
tt.setQq("qqq");
context.put("tt", tt);
context.put("name", "Velocity");
context.put("project", "Jakarta");
StringWriter w = new StringWriter();
// try
// {
// velocity().mergeTemplate("example2.vm", context, w);
// }
// catch(Exception e)
// {
// System.out.println("Problem merging template : " + e);
// }
System.out.println(" template : " + w);
// String s = "We are using $project $name to render this.\n #parse(\"example2.vm\")";
String s = " ${tt.qq}_dd ";
w = new StringWriter();
try
{
velocity().evaluate(context, w, "mystring", s);
}
catch(ParseErrorException pee)
{
System.out.println("ParseErrorException : " + pee);
}
catch(MethodInvocationException mee)
{
System.out.println("MethodInvocationException : " + mee);
}
catch(Exception e)
{
System.out.println("Exception : " + e);
}
System.out.println(" string : " + w);
}
public static String evaluate(String vmText, Map map, String logTag)
{
// System.out.println(vmText);
StringWriter w = new StringWriter();
VelocityContext context = new VelocityContext();
if(map != null)
{
java.util.Iterator it = map.keySet().iterator();
while(it.hasNext())
{
Object obj = it.next();
if(obj instanceof String)
context.put((String) obj, map.get(obj));
}
}
try
{
velocity().evaluate(context, w, logTag, vmText);
}
catch(ParseErrorException pee)
{
System.out.println("ParseErrorException : " + pee);
}
catch(MethodInvocationException mee)
{
System.out.println("MethodInvocationException : " + mee);
}
catch(Exception e)
{
System.out.println("Exception : " + e);
}
return w.toString();
}
public static String mergeVM(String vmFile, Map map)
{
StringWriter w = new StringWriter();
VelocityContext context = new VelocityContext();
if(map != null)
{
java.util.Iterator it = map.keySet().iterator();
while(it.hasNext())
{
Object obj = it.next();
if(obj instanceof String)
context.put((String) obj, map.get(obj));
}
}
try
{
velocity().mergeTemplate(vmFile, context, w);
}
catch(ParseErrorException pee)
{
System.out.println("ParseErrorException : " + pee);
}
catch(MethodInvocationException mee)
{
System.out.println("MethodInvocationException : " + mee);
}
catch(Exception e)
{
System.out.println("Exception : " + e);
}
return w.toString();
}
}
package com.jh.app.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ResourceNotFoundException;
public class VelocityUtil
{
public static String GLOBLE_VM_PATH = "/usr/bj_app/ROOT";
private static VelocityEngine ve =null;
synchronized public static VelocityEngine velocity()
{
if(ve!=null) return ve;
ve = new VelocityEngine();
Properties p = new Properties();
p.setProperty(Velocity.RUNTIME_LOG, "velocity_jh.log");
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, GLOBLE_VM_PATH);
try
{
ve.init(p);
}
catch (Exception e)
{
e.printStackTrace();
}
return ve;
}
public static void main(String args[]){
Map map=new HashMap();
map.put("Name", "王立昌");
map.put("util", new UtilObj());
System.out.println(evaluate("Hello $Name !" +
"" +
" #set ( $dao = $util.getDao(\"cms\") ) \n"+
" #set ( $sql = \"select * from News_tab order by NewsId desc limit 10 \") \n"+
" #set ( $className = \"com.jh.app.tag.app.News\") \n"+
" #set ( $clazz = $util.classForName($className) ) \n" +
" $sql \n"+
" #set ( $list = $dao.getObjList( $sql,$clazz)) \n"+
" #foreach( $obj in $list ) \n"+
" $obj.Title \n"+
" #end \n"+
" \n"
,map,"test"));
}
public static String evaluate(String vmText, Map map, String logTag)
{
System.err.println("########################");
System.err.println(vmText);
System.err.println("########################");
StringWriter w = new StringWriter();
VelocityContext context = new VelocityContext();
if (map != null)
{
java.util.Iterator it = map.keySet().iterator();
while (it.hasNext())
{
Object obj = it.next();
if (obj instanceof String)
context.put((String) obj, map.get(obj));
}
}
try
{
velocity().evaluate(context, w, logTag, vmText);
}
catch (ResourceNotFoundException e)
{
//该处理是为了避免包含的文档不存在而做的处理.
String msg = "org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource ";
String str = e.toString();
if (str.indexOf(msg) < 0)
return "";
str = str.replaceAll(msg, "");
str = str.replaceAll("'", "");
String fileName = GLOBLE_VM_PATH + "/" + str;
writeStrFile(fileName, "");
return evaluate(vmText, map, logTag);
}
catch (Exception e)
{
e.printStackTrace();
}
return w.toString();
}
public synchronized static boolean writeStrFile(String strFileName, String strContent)
{
if (strFileName.trim().equals(""))
return true;
int indx = strFileName.lastIndexOf("/");
if (indx >= 0)
{
String strDir = strFileName.substring(0, indx);
File f = new File(strDir);
if (!f.exists())
f.mkdirs();
}
try
{
FileOutputStream fos = new FileOutputStream(strFileName);
try
{
OutputStreamWriter o = new OutputStreamWriter(fos, "GBK");
o.write(strContent);
fos.flush();
o.close();
}
finally
{
fos.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
return true;
}
public static String mergeVM(String vmFile, Map map)
{
StringWriter w = new StringWriter();
VelocityContext context = new VelocityContext();
if (map != null)
{
java.util.Iterator it = map.keySet().iterator();
while (it.hasNext())
{
Object obj = it.next();
if (obj instanceof String)
context.put((String) obj, map.get(obj));
}
}
try
{
velocity().mergeTemplate(vmFile, context, w);
}
catch (Exception e)
{
e.printStackTrace();
}
return w.toString();
}
}
分享到:
相关推荐
2. **高效性能**: Velocity在编译时生成Java源码,执行效率高。 3. **良好的分离**:通过VTL,可以实现表现层和业务逻辑的彻底分离,提高代码的可维护性。 4. **强大的社区支持**:由于Apache的背景,Velocity有...
Velocity的性能优化包括合理设置缓存策略、避免在模板中执行复杂逻辑以及优化VTL表达式。理解 Velocity的内部工作原理,例如模板加载机制和指令处理流程,可以帮助我们更好地优化性能。 总之,Velocity是一个强大的...
在MVC模式下,Velocity允许界面设计人员专注于页面的显示效果,而Java程序开发人员则可以专注于业务逻辑编码,从而实现了前后端的分离。这种分离有助于维护网站的长期发展,为程序员和设计师之间的协作提供了便利,...
- **变量 (Reference)**:变量是一种参考类型,在 Velocity 中用来引用 Java 代码中定义的对象或其他 VTL 语句的值。变量以 `$` 字符开头。 - **示例**:`<html><body>Hello $customer.Name!</body></html>`。在这个...
在Velocity中,它可能被用来增强数据结构的操作,如集合的排序、过滤或转换。 2. **velocity-1.4.jar**:这是Velocity的主要库文件,包含了 Velocity Engine的核心实现。它负责解析模板,执行嵌入的Java代码,并...
在Web开发中,Velocity 提供了Velocity Template Language(VTL),使得页面设计人员可以专注于页面布局和样式,而Java程序员则处理业务逻辑。例如,在一个在线MUD商店的场景中,Velocity 可以根据用户的购买历史...
2. **模板语言**:Velocity模板语言(VTL)是 Velocity 的核心,它允许开发者在模板中嵌入Java代码,但不直接执行Java代码,而是通过VelocityEngine编译并执行。 3. **上下文(Context)**:Velocity中的Context对象...
3. **高性能**: 由于Velocity在编译时将模板转换为Java源代码,运行时执行的是已编译的Java代码,因此其性能表现优秀。 4. **可扩展性**: Velocity支持自定义指令和宏,可以轻松地扩展功能以满足特定需求。 5. **...
在1.7版本中,Velocity提供了一种简洁、高效的模板语言,使得非程序员(如内容创作者)也能方便地修改页面布局,而程序员则负责处理数据和业务逻辑。 **核心概念和特点:** 1. **模板语言**:Velocity使用自己的...
Velocity的核心优势在于它能够将Java代码从Web页面中分离,让设计师专注于页面布局与视觉效果,同时让开发者专注于业务逻辑的编写,遵循MVC模式,大大提升了项目的可维护性和开发效率。 #### 二、Velocity的功能与...
这种能力使得 Velocity 成为了一个强大的工具,在多个场景中发挥着重要作用。 - **Web 开发:** 当 Velocity 应用于 Web 开发时,它支持界面设计师与 Java 程序员同步开发基于 MVC 架构的 Web 站点。页面设计师专注...
整合的关键在于如何在Velocity中解析和执行SSI指令。这可能涉及到自定义 Velocity工具或者中间件,使得Velocity引擎能够识别并处理SSI标签,然后将其转换为Velocity语法执行。 例如,我们可以创建一个 ...
**Velocity**是一个强大的Java模板引擎,它允许开发者将HTML页面中的显示逻辑与业务逻辑分离,使得Web开发更加高效和简洁。Velocity源自Apache软件基金会,是Apache Jakarta项目的一部分,被广泛应用于各类Web应用和...
**Velocity** 是一款基于 Java 的模板引擎,它提供了一种简洁高效的语法——**Velocity 模板语言 (VTL)**,用于引用 Java 代码中定义的对象。这使得页面设计者能够专注于页面布局和样式,而 Java 开发人员则负责业务...
Velocity模板语言(VTL)允许开发者在模板中插入Java表达式,但模板本身并不执行Java代码,而是由Velocity引擎解析并执行。这样做的好处是提高了安全性,降低了模板被恶意修改的风险。Velocity支持控制结构(如if、...
- **MVC模式的应用**:Velocity遵循MVC设计模式,Model负责业务逻辑,View负责展示,Controller则将两者关联起来,Velocity主要关注View部分。 - **自定义指令(Custom Directives)**:如果内置的指令不能满足需求...
SpringBoot集成Velocity代码生成模板是现代Java开发中的一个重要工具,它极大地提高了开发效率,尤其是在处理大量数据表映射到业务层代码时。Spring Boot作为一款轻量级的框架,简化了初始化和配置过程,而Velocity...
5. 调试和错误处理:使用Velocity的`#debug`指令可以帮助调试模板,查看变量的状态和执行流程。 ** 学习资源 ** 提供的《Velocity_java开发指南》和《Java的模板引擎Velocity初体验》两本书籍是学习Velocity的好...
3. **Action类处理**:Action类中需要定义业务逻辑,返回的数据可以通过getter和setter方法供Velocity模板访问。 **三、Velocity基本语法** 1. **引用变量**:在Velocity模板中,可以使用`${variable}`来引用Java...