[WEB]Velocity
来源:互联网 发布:小甲鱼python好吗 编辑:程序博客网 时间:2024/05/01 09:50
在用JSP的时候会把Java和HTML混在一起,这样会逻辑混乱、可维护性差等。Velocity解决了这个问题,在HTML页面和Java之间通过Context传递数据进行动态渲染,Velocity也支持简单的语法,比如循环。需要注意的是我们应该尽量保证View层的简洁。
原理
通过下面代码就能大致明白Velocity是如何工作的:
// 初始化Velocity引擎VelocityEngine ve = new VelocityEngine();ve.init();// 获取模板Template t = ve.getTemplate( "hello.vm" );VelocityContext context = new VelocityContext();context.put("content", "Hello World.");// 根据上下文渲染模板StringWriter writer = new StringWriter();t.merge(context, writer);System.out.println(writer.toString());渲染的结果是页面输出,也就是String,只不过Servlet不会向标准输出流写。
配置
这里看springMVC中的Velocity配置方法,实际上是通过Resolver来实现的:
<!-- 配置信息 --><bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"><property name="resourceLoaderPath"><value>/velocity</value></property><property name="velocityProperties"><props><prop key="input.encoding">GBK</prop></props></property></bean><!-- Resolver --><bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.velocity.VelocityView" /><property name="order" value="0" /><property name="suffix" value=".vm" /><property name="contentType" value="text/html;charset=UTF-8" /><property name="exposeSpringMacroHelpers" value="true" /><property name="exposeRequestAttributes" value="false" /><property name="exposeSessionAttributes" value="false" /><property name="redirectHttp10Compatible" value="false" /><property name="redirectContextRelative" value="false" /></bean>用Resolver的原因在DispatcherServlet中看到。在上面的配置中有模板路径、编码、后缀名、contentType等。
在最近的一个项目中计划用Velocity来渲染数据,也就是说vm模板的来源不是文件了,这时候可以通过自己实现一个ResourceLoader来完成:
public class VelocityShellLoader extends ResourceLoader { @Override public void init(ExtendedProperties configuration) { } @Override public InputStream getResourceStream(String source) throws ResourceNotFoundException { return new ByteArrayInputStream(source.getBytes()); } @Override public boolean isSourceModified(Resource resource) { return false; } @Override public long getLastModified(Resource resource) { return 0; }}
在使用引擎渲染的时候指定它就可以了:
public class Test { public static void main(String[] args) throws Exception { VelocityEngine velocityEngine = new VelocityEngine(); Properties properties = new Properties(); properties.put("resource.loader", "srl"); properties.put("srl.resource.loader.class", "com.wszt.VelocityShellLoader"); velocityEngine.init(properties); Template template = velocityEngine.getTemplate("你好 $name !\r\n$project project.", "gbk"); VelocityContext context = new VelocityContext(); context.put("name", "张三"); context.put("project", "Jakarta"); StringWriter writer = new StringWriter(); template.merge(context, writer); System.out.println(writer.toString()); }}
--------- END ----------
0 0
- [WEB]Velocity
- Velocity之Web实践
- Velocity之Web实践
- Velocity -- Java Web 开发新技术
- Velocity -- Java Web 开发新技术
- 用velocity开发web模板
- 使用Velocity开发web程序
- Velocity之Web高级篇-VelocityStruts
- Velocity 为 Java Web 应用开发“增速”
- Velocity在web项目中生成模板
- Velocity作为web开发的View
- Velocity之动态获取Web项目根目录
- Velocity
- Velocity
- Velocity
- Velocity
- Velocity
- Velocity
- 页面时间格式化的处理
- JQuery弹出层效果制作
- VPN介绍
- Android中的.9.png图形的机制及制作和使用方法
- 剑指offer面试题13
- [WEB]Velocity
- ASM读写字节码
- POJ2371Questions and answers
- matlab 直方图 整理
- SQL总结(一)基本查询
- hdu 1232简单并查集
- 基于jQuery弹出层有9种效果
- 01_translation_avtivity生命周期04
- nodeValue以及其与value的区别以及JS nodeName、nodeValue、nodeType返回类型