- 浏览: 683002 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
Hippyqq:
谢谢很有用,
java中遍历MAP的几种方法 -
XSoftlab:
超详细。。。Java map 详解 - 用法、遍历、排序、常用 ...
java中遍历MAP的几种方法 -
bobo22:
importnet.sf.fmj.ui.application ...
java来调用电脑视频摄像头拍照进行截图 -
qq981378640:
#include <stdio.h>
int ...
c语言中unsigned类型和普通类型间的转换 -
qq981378640:
楼主你这样有点复杂了,直接这样写更好更方便
#include ...
c语言中unsigned类型和普通类型间的转换
Velocity作为一款成熟的基于java的模板引擎,能够帮我们实现页面静态化。它允许使用模板语言(template language)来引用由java代码定义的对象。最重要的是,它简单易用,乃至于看一眼它的示例就可上手使用。
------------------------------------------
“Velocity将Java代码从Web 页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。”——Velocity用户手册
Velocity下载地址:http://velocity.apache.org/
在开发中,我们必须导入\lib\log4j-1.2.12.jar和velocity-1.6-dep.jar两个包。如果使用velocity-1.6.jar会稍微麻烦一点,需要把\lib下的commons-collections-3.2.1.jar\commons-lang-2.4.jar和oro-2.0.8.jar放入类路径下。 velocity-1.6-dep.jar文件内部已经包含前面三个jar文件的类。
导入开发包以后,我们需要在类路径中加入velocity.properties文档:
指定日志文件存放位置
runtime.log = E:\\spring\\velocity\\velocity_example.log
指定模版文件加载位置
file.resource.loader.path=E:\\spring\\velocity
指定输入编码格式
input.encoding=UTF-8
指定velocity的servlet向浏览器输出内容的编码
default.contentType=text/html; charset\=UTF-8
指定输出编码格式
output.encoding=UTF-8
接下来是老黎讲的10个例子:
一:
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("hello", "HelloWorld");
context.put("who", "黎明");
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
${who}说:${hello}
二:访问对象
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("person", new Person(2,"小张"));
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
${person.id}=${person.name}
三:历遍集合/数组
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("list", Arrays.asList("第一个","第二个","第三个"));
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#foreach($element in $list)
$element
#end
四:历遍Map集合
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
Map<String,String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
context.put("map", map);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#foreach( $key in $map.keySet() )
$key=$map.get($key)
#end
五:获得当前迭代的索引
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
Map<String,String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
context.put("map", map);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#foreach( $key in $map.keySet() )
$velocityCount > $key=$map.get($key)
#end
velocityCount 变量名可以通过directive.foreach.counter.name属性修改,如: directive.foreach.counter.name =index,以后可以通过$index进行访问。迭代的索引默认从1开始,我们可以通过directive.foreach.counter.initial.value=0进行修改。
六:在模版中进行赋值
#set( $name = "老张" )
$name
#set( $condition = true )
数组赋值:
#set( $ints = [1..10])
#foreach( $entry in $ints)
$entry
#end
#set( $ints = ["第一个","第二个"])
#foreach( $entry in $ints)
$entry
#end
七:#if#else#end
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("condition", true);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#if($condition)
成立
#else
不成立
#end
八:格式化日期
格式化日期必须将velocity-tools-generic-1.4.jar包加入到类路径。
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("now", new Date());
context.put("dateformat", new DateTool());
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
$dateformat.format("yyyy-MM-dd", $now)
九:输出到文件
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("title", "巴巴运行网");
context.put("body", "这是内容");
Template template = Velocity.getTemplate("mytemplate.vm");
File savefile = new File("E:\\spring\\velocity\\WebRoot\\page\\test.html");
if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();
FileOutputStream outstream = new FileOutputStream(savefile);
OutputStreamWriter writer = new OutputStreamWriter(outstream,"UTF-8");
BufferedWriter bufferWriter = new BufferedWriter(writer);
template.merge(context, bufferWriter);
bufferWriter.flush();
outstream.close();
bufferWriter.close();
}catch( Exception e ){
e.printStackTrace();
}
十:null处理
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("title", null);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter writer = new StringWriter();
BufferedWriter bufferWriter = new BufferedWriter(writer);
template.merge(context, bufferWriter);
bufferWriter.flush();
System.out.println(writer.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
$title
------------------------------------------
“Velocity将Java代码从Web 页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。”——Velocity用户手册
Velocity下载地址:http://velocity.apache.org/
在开发中,我们必须导入\lib\log4j-1.2.12.jar和velocity-1.6-dep.jar两个包。如果使用velocity-1.6.jar会稍微麻烦一点,需要把\lib下的commons-collections-3.2.1.jar\commons-lang-2.4.jar和oro-2.0.8.jar放入类路径下。 velocity-1.6-dep.jar文件内部已经包含前面三个jar文件的类。
导入开发包以后,我们需要在类路径中加入velocity.properties文档:
指定日志文件存放位置
runtime.log = E:\\spring\\velocity\\velocity_example.log
指定模版文件加载位置
file.resource.loader.path=E:\\spring\\velocity
指定输入编码格式
input.encoding=UTF-8
指定velocity的servlet向浏览器输出内容的编码
default.contentType=text/html; charset\=UTF-8
指定输出编码格式
output.encoding=UTF-8
接下来是老黎讲的10个例子:
一:
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("hello", "HelloWorld");
context.put("who", "黎明");
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
${who}说:${hello}
二:访问对象
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("person", new Person(2,"小张"));
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
${person.id}=${person.name}
三:历遍集合/数组
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("list", Arrays.asList("第一个","第二个","第三个"));
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#foreach($element in $list)
$element
#end
四:历遍Map集合
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
Map<String,String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
context.put("map", map);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#foreach( $key in $map.keySet() )
$key=$map.get($key)
#end
五:获得当前迭代的索引
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
Map<String,String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
context.put("map", map);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#foreach( $key in $map.keySet() )
$velocityCount > $key=$map.get($key)
#end
velocityCount 变量名可以通过directive.foreach.counter.name属性修改,如: directive.foreach.counter.name =index,以后可以通过$index进行访问。迭代的索引默认从1开始,我们可以通过directive.foreach.counter.initial.value=0进行修改。
六:在模版中进行赋值
#set( $name = "老张" )
$name
#set( $condition = true )
数组赋值:
#set( $ints = [1..10])
#foreach( $entry in $ints)
$entry
#end
#set( $ints = ["第一个","第二个"])
#foreach( $entry in $ints)
$entry
#end
七:#if#else#end
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("condition", true);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
#if($condition)
成立
#else
不成立
#end
八:格式化日期
格式化日期必须将velocity-tools-generic-1.4.jar包加入到类路径。
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("now", new Date());
context.put("dateformat", new DateTool());
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
$dateformat.format("yyyy-MM-dd", $now)
九:输出到文件
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("title", "巴巴运行网");
context.put("body", "这是内容");
Template template = Velocity.getTemplate("mytemplate.vm");
File savefile = new File("E:\\spring\\velocity\\WebRoot\\page\\test.html");
if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();
FileOutputStream outstream = new FileOutputStream(savefile);
OutputStreamWriter writer = new OutputStreamWriter(outstream,"UTF-8");
BufferedWriter bufferWriter = new BufferedWriter(writer);
template.merge(context, bufferWriter);
bufferWriter.flush();
outstream.close();
bufferWriter.close();
}catch( Exception e ){
e.printStackTrace();
}
十:null处理
try{
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("title", null);
Template template = Velocity.getTemplate("mytemplate.vm");
StringWriter writer = new StringWriter();
BufferedWriter bufferWriter = new BufferedWriter(writer);
template.merge(context, bufferWriter);
bufferWriter.flush();
System.out.println(writer.toString());
}catch( Exception e ){
e.printStackTrace();
}
mytemplate.vm内容如下:
$title
发表评论
-
java应用CPU占用100%内存泄漏分析总结
2017-11-28 08:46 572转; http://www.blogjava.net/hank ... -
Java Mysql存取Blob数据
2014-10-21 12:54 1557当数据库字段为blob类型时 ,我们如果使用PreparedS ... -
关于日志的等级 的配置
2014-07-02 16:49 633#这里定义能显示到的最低级别,若定义到INFO级别,则看不到D ... -
Extjs中如何在一行textfield后面加几个字
2014-04-14 16:38 1530{ fieldLabel : '输入框', xtype : ' ... -
数据库中图片的操作(字节流的操作)
2013-12-09 17:26 829package com.fww.util; import j ... -
java 获得本地ip
2013-11-28 18:04 894Enumeration allNetInterfaces = ... -
java多线程下载的例子代码
2013-09-09 16:16 0java多线程下载的例子代码 import java.io.I ... -
java来调用电脑视频摄像头拍照进行截图
2013-09-09 15:34 10409packagecom.pengo.capture; i ... -
java中lucene解析word工具类
2013-09-09 15:32 1057java中lucene解析word工具类(读取word文档并查 ... -
Java 向oracle插入百万数据
2013-09-09 15:30 1553这里的表是没加索引的 ... -
java 写 excel
2013-08-28 10:29 983import java.io.FileOutputStream ... -
list 排序
2013-06-20 20:43 1086import java.util.Collections; i ... -
java抓取网络图片放到本地
2013-05-07 10:39 4298import java.io.BufferedInputStr ... -
java代码发送JSON格式的httpPOST请求
2013-05-06 13:41 20385package com.test; import java. ... -
java操作excel(HSSF样式) .
2013-04-15 15:06 1977java操作excel(HSSF样式一) import ja ... -
JAVA+Ftpclient操作
2013-03-07 16:35 6583最近再做个ftp上传、下载的项目,用到的包是sun.net.f ... -
自动消除文本框中的空格;js清除空格问题,去除空格问题
2013-03-01 11:22 6319自动消除文本框中的空格;js清除空格问题,去除空格问题 要完成 ... -
java执行Linux命令 .
2012-12-26 09:29 1301/** * 修改Linux目录权限 * @param ... -
UUID生成类
2012-12-16 18:18 2496import java.net.InetAddress; im ... -
java反射获得类的字段和值
2012-12-10 17:26 1638import java.util.HashMap; impo ...
相关推荐
在Web开发中,页面静态化是一种提升网站性能和用户体验的...通过以上步骤,我们能够利用Velocity和FreeMarker模板引擎实现页面静态化,提高Web应用的性能和用户体验。在实际项目中,需要根据需求进行适当的调整和优化。
3. **实现JSP页面静态化的策略**: - **重写JspWriter**:JspWriter是JSP页面中负责输出内容的对象。通过自定义JspWriter,可以在页面渲染时直接将内容写入到静态HTML文件中,而不是输出到浏览器。 - **使用...
在“velocity生成静态页面实例”中,我们首先需要一个 Velocity模板文件(通常以`.vm`为扩展名),在这个文件中,我们可以使用Velocity语法来定义页面结构,并插入动态数据占位符。例如,我们可以写一个简单的模板:...
Java页面静态化主要有两种方式:服务器端静态化和客户端静态化。 1. 服务器端静态化: - **预渲染(Prerendering)**:在用户请求之前,系统自动将一些常用或者热点页面生成静态HTML文件,存储在文件系统或CDN上。...
在Java Web环境中,可以使用以下技术实现页面静态化: 1. JSP到HTML转换:通过JSP的`<jsp:include>`和`<jsp:forward>`标签,或者使用Servlet生成HTML,然后保存到指定目录。 2. Freemarker或Thymeleaf模板引擎:...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。
新闻静态化技术是一种提高网站性能和搜索引擎...总结,新闻静态化通过SSI和Velocity等技术,实现了动态内容与静态展示的高效结合,提高了网站性能和用户体验。在实际应用中,可根据项目需求和资源选择合适的技术方案。
1. **Logging System**:Velocity通过LogManager和LogChute实现日志记录。首先,它创建一个HoldingLogChute实例作为临时存储,然后根据配置文件中的runtime.log.logsystem或runtime.log.logsystem.class属性来创建...
本案例将探讨如何利用JavaWeb监听器实现页面静态化,以提高网站性能和用户体验。页面静态化是将动态生成的网页转化为HTML静态文件,使得用户在访问时无需经过服务器端复杂的处理过程,直接从硬盘或缓存中读取内容,...
Velocity在页面静态化中的作用是动态生成这些静态页面,根据用户数据或环境变量进行个性化定制,同时保持静态页面的高效交付。 在使用Velocity时,开发者首先需要在项目中引入velocity.jar包。这个jar包包含了...
Java CMS(内容管理系统)生成静态页面是一种常见的优化网站性能和提升用户体验的方法。在这个过程中,原本由动态脚本生成的...在实际应用中,需要结合具体业务场景和资源状况,选择合适的静态化策略,以实现最佳效果。
**JSP静态化总结(JSP2HTML)** 在Web开发中,JSP(JavaServer Pages)是一种动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,以实现...通过合理的静态化策略,我们可以构建一个既快速又易于维护的Web应用。
- 是否使用ESI技术实现页面部分更新。 - 是否使用物理机提高性能。 - 压缩处理由谁完成。 - 选择何种类型的网卡以适应高并发场景。 #### 四、总结 通过Detail系统的静态化改造,淘宝技术团队成功地解决了原有架构...
2. **用户体验**:静态化不应牺牲页面的美观性和可用性,保证用户界面的正常展示。 3. **维护便捷性**:需要考虑内容的动态管理,如菜单、链接和广告位的调整,应能轻松实现静态页面的更新。 **三、Java实现HTML...
Velocity,作为一个基于Java的模板引擎,其主要任务是将静态的HTML页面与动态的数据内容结合,从而实现网页的个性化和动态生成。它采用模板语言(Template Language),使得非程序员,如网页设计师,能够专注于页面...
在压缩包文件"通用静态页面生成系统(Engineer) v.1"中,我们可以推测它包含了该系统的源代码、文档、可能的示例配置文件以及部署指南等资源。对于开发者而言,这将是一个宝贵的资源,他们可以研究源代码来理解系统的...
在这种场景下,"Jsp结合Velocity实现依据Word模板文件生成对应数据文件"的技术方案显得尤为实用。JSP(JavaServer Pages)是用于构建动态Web应用的服务器端技术,而Velocity则是一个强大的模板引擎,它允许开发者将...
作为一个强大的模板语言,Velocity能够将静态页面和动态内容分离,使得开发者可以专注于业务逻辑,而设计师则可以专注于页面布局和样式设计。 在Java工程中,Velocity通常被用作Web应用的视图层技术,与Spring MVC...
【OA静态页面】是企业信息化建设中的一个重要组成部分,主要用于实现办公自动化系统的用户界面展示。在Spring、Hibernate和Struts这三大框架的集成下,可以构建高效、稳定的OA系统前端。这三个框架分别是Spring作为...