动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ J2EE/J2ME教程 ]的信息

本月文章推荐
.J2EE的Web和企业架构(WEA)设计.
.第一个Spring MVC程序.
.贪吃蛇手机游戏.
.介绍MIDP应用程序的属性.
.介绍J2ME的安全结构.
.整合.NET与J2EE两大平台化解争端.
.3D编程指南第五部分:使用M3G渲染.
.Servlet中jdbc应用高级篇之二.
.使用SAAJ1.2发送和接收二进制Web.
.基于Hibernate和Struts的J2EE应用.
.GameAction的使用范例.
.索爱MIDP 2.0手机的系统字体特效.
.NokiaS40 和 S60 开发平台 1.0 已.
.利用Filter实现IP过滤.
.关于手机的IMEI号问题的一些总结.
.Jboss下配置EJB.
.发送PDF文件.
.Java 命名人谈JAVA.
.JDBC概述(二).
.EJB 3.0简介.

velocity的几层窗户纸

发表日期:2007-12-23 |


这几天有一个项目要使用velocity来生成文件,遇到了一些问题,最后也辗转找到了解决的方法。用一个朋友的话说,这就是一层窗户纸。
开发环境:Tomcat5.5,Velocity-1.4
1、velocity模版和配置文件的位置
   为了测试方便,我首先把根据模版生成文件的源代码单独拿出来,代码(省去了无关的代码)如下:
   //FileManager.Java
   //初始化方法,获得属性配置
   private void init() {
  try {
   Velocity.init("velocity.properties");
   
  } catch(Exception e) {
   System.out.println("初始化时发生错误!");
   e.printStackTrace();
  }
 }

   
        /**
  * 根据模板建立文件
  */
 public boolean createFile(String BT, String content, String[] tp, String fileName) {
  //是否创建成功
  boolean isCreateSUCcess = true;
  
  try {
   //建立模版
   VelocityContext context = new VelocityContext();
   
   //设置各个变量
   //…
   
   //得到模版
   Template template = Velocity.getTemplate("news.vm");
   
   //写入文件
   //…
  } catch (Exception e) {
   //异常处理
   //…
  }
          }
   这里配置文件是:velocity.properties,模版文件:news.vm,它们和FileManager的package在同一个目录下,如:
   FileManager的package为com.bokee.mydeman,FileManager.class的位置是C:\1\com\bokee\mydeman\FileManager.class,那么velocity.properties和news.vm的路径就是C:\1\velocity.properties和C:\1\news.vm;如果FileManager没有声明package,那么配置文件和模版文件就和FileManager.class在同一个目录下。
   按照以上规则,测试通过。于是移植到Tomcat下面,可是配置文件和模版文件应该放在什么地方呢?按照上面的规则,它们就应该在WEB-INF/classes下,可是实际运行却报出无法找到资源的异常。于是就把它们分别放在了web工程根目录下、WEB-INF下等几个位置,均报同样的异常。Google一下,发现竟然要放在system32下,呵呵,这样放置程序如何移植?于是决定自己指定它们的路径,修改后的程序如下:
  //
  public class FileManager {
 private String config = "";
       
        //构造函数中指定配置文件和模版文件所在的路径
 public FileManager(String config) {
  this.config = config;
  init();
 }
 
 /**
  * 初始化模版
  */
 private void init() {
  //…
   Velocity.init(config + "/velocity.properties");
  //…
 }
 
 /**
  * 根据模板建立文件
  */
 public boolean createFile(String bt, String content, String[] tp, String fileName) {
  //…
   Template template = Velocity.getTemplate(config + "/news.vm");
   
  //…
 }
 
    }
   保存测试,init()方法顺利通过,可是模版仍然报出无法找到资源的异常。呜呼,只有google了,说是要使用Velocity的ResourceEngine来加载资源,否则找不到vm文件。按照指示修改源代码,如下:
   VelocityEngine engine = new VelocityEngine();
   Properties properties = new Properties();
   properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, config);
   engine.init(properties);
   Template template = engine.getTemplate("news.vm");
   重新运行测试,OK!
2、模版的中文问题
   Java的中文问题像一个幽灵一样总是在程序员的周围转来转去,不定什么时候就会出来骚扰一下。
   news.vm中使用了中文的字符串,在生成的文件中总是会变成莫名其妙的乱码。查阅Velocity的Developer's Guide文档,在Velocity Configuration Keys and Values一节中给出了具体的解决方法,使用input.encoding和output.encoding指定输入和输出的编码格式(默认的是ISO-8859-1),于是在velocity.properties中分别指定二者的值:
   input.encoding = GBK
   output.encoding = GBK
   单独测试通过,可以正确输出中文。可是在Tomcat中无论如何都出不来中文,把这两个属性值在ISO-8859-1、UTF-8和GBK中变换了无数次,仍然是乱码。最后向高人求教,修改源代码为:
   Template template = engine.getTemplate("news.vm","GBK");
   呵呵,一切OK!中文正常显示,向其道谢,笑称“一层窗户纸”。
3、$velocityCount变量
   vm文件中需要使用$velocityCount,并且文件包含了数个循环,而按照Velocity的DOC的说明,$velocityCount是循环的索引值,于是便担心$velocityCount在下一个循环中,会不会以上一个循环的结束值为初始值,实际运行发现这种担心是没有必要,每次$velocityCount都是从1开始计数。
   在循环中要用到$velocityCount的前一个值和后一个值,于是直接使用$velocityCount-1和$velocityCount+1。怪现象出现了,加1的情况可以正确计算出结果,并且能够正确显示,可是减1的语句直接把$velocityCount-1作为一个字符串输出了。把表达式单独提出来,仍然如此。于是改为#set($temp=$velocityCount-1),呵呵,依然如此,$temp并没有被赋为整数值,还是$velocityCount-1字符串。再次修改:
   #set($temp=$velocityCount)
   $temp-1
   运行后,查看生成的文件,问题解决,终于得到了需要的整数值。


(出处:http://www.knowsky.com)


上一篇:JSR 184:3D坐标系和定位总结 人气:785
下一篇:MIDP2.0中如何通过代码画半透明的圆和椭圆 人气:765
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 谷秋精品课程软件课程版 v2.3
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成