Java2Html(http://www.java2html.com/)是一个非常好用的工具,它可以直接将您的java源代码生成HTML页面,而且结构组织的就象javadoc组织的一样好,并且支持Ant Task扩展,给广大的编程爱好者一个非常方便实用的功能.笔者就非常喜欢使用ant结合javadoc/java2html等直接生成javadoc和java html文件并发布到服务器上.各位可以去我的站点看一下(http://www.ibeyond.org/code),我的网站就是使用eclipse(http://www.eclispse.org)结合ant(http://ant.apache.org/)等自动发布的,如果你愿意的话甚至可以进行每日构建.我简直是太喜欢Ant这个工具了(话题有点跑了,没有办法,小时候写作文就容易跑题,习惯了).
言归正传,还是回到改造手记上来.
不知道使用过java2html的各位看客有没有注意到.java2html默认是不支持字符编码的.也是,谁让作者是一个洋人(从它的版权信息里看,应该是一个英国人)呢?他们怎么能注意到遥远的东方有一群”巨龙”将要使用他的”小软件”呢?如果你的程序代码中输入了中文那么,^_^,那么恭喜你,你可以见识一下带有中文乱码的Html页面了.说实话,这也是不容易见到的.当然,英文极好的看官可以离开了,因为英文极好的您的代码里当然不会出现中文字符了,这也有损于你的能力的体现了,而象我等这样只是认识简单的二十几个英文字母的英文爱好者当然会觉得心理非常不爽了(如果有可能我甚至想把程序代码全部使用中文书写,当然java支持这么作,只是我的boss不同意吧了,但愿这片文章不会呗我的boss看到.).
我知道很多人都象我一样对于程序对于编程有着近乎狂热的爱好(如果没有这么狂热的爱好你也不会利用者有限的宝贵的等价于金钱的时间来看我的这个臭屁文章),当然不满足于使用的软件会有这样的瑕疵,那么好吧,套用现在计算机硬件高手常用的一个口头禅,让我们开始”DIY”历程吧(臭屁这么多,终于要进入主题了,我也开始有些心急了,呵呵).
实际上,到这里,我这个”榆木脑袋”(小学老师就是经常使用这个”爱称”)只想到了两个解决办法:
一. 在使用java2html之前先将我的代码进行转码,然后让java2html使用转码后的代码.
二. 直接修改这个java2html的代码,给java2html添加一个encoding编码参数.
各位不难想象.如果利用方法一,不管你如何转换在英文环境中还是会出现乱码,既是能正确显示中文也需要你在
Browser上手动选择一下编码方式.而方法二才能体现出我们的”高超水平”,而且可以很平滑的和原有的软件结合,不影响其他的应用.
从作者的软件许可协议(http://www.vaegar.f9.co.uk/#License)可以看到这是一个共享软件,使用者可以自由的发布,但是不可以反编译,逆向工程等.所以我接下来将要作的是严格来说应该很不妥当的,但是同样我也不能容忍这个软件的这个微小的瑕疵,于是,我在完全保留其版权信息并且尊重其版权的情况下对java2html进行了有限的扩充(在软件中我还加入了我自己的一点小记号,呵呵,人无完人呀).
接下来我们要作的既是反编译这个软件包了.关于Decompile,业界有很多争议,很多人认为java编译过的代码是不安全的,既是使用了混淆器也是这样,这里我不想讨论这个问题,因为我对这个方面也不是专家,也不是能人里手,还是留给那些喜欢讨论的人来进行吧(关于java的讨论实在是太多了).我在这里想说的是,我并不是鼓励大家对java软件进行反编译,个人认为只是在觉得需要完善这个软件的时候但不能获得java源代码的时候才能采用这种最下策的下策,而且进行相关工作的时候也一定要保留原作者的相关版权信息,仅此声明一下.
首先将原来的j2h.jar(可以从http://www.java2html.com下载)解包,用Winrar之类的就可以解开,然后象一个专业的骇客一样,寻找入口吧(有点黑客帝国的意思了).最明显的入口就是META-INF/MANIFEST.MF,为什么这么说呢?因为java通过这个文件指定这个Jar包的执行程序的类名,也就是带有Main方法的类,当然它就是入口了(我并不是黑客帝国中的先知,第一那个先知是女的,至少是一个女人形态,而我是男的;第二,我并没有未卜先知的能力,如果有这个能力我就去考买奖券发家了,谁还来写这劳什子程序呀).所有我们的目标就是先搞定这个文件,通过它寻找突破口.
J2h.class:
import com.java2html.Java2HTML;
public class j2h
{
public static void main(String args[])
throws Exception
{
Java2HTML.main(args);
}
public j2h()
{
}
}
看到了,它直接把args参数送到java2html.main中了,就象破案一样,有了现在就开始追踪吧.
欲知后事如何,且听下回分解.
版权归iBeyond(http://www.ibeyond.org)所有,转载请著名出处并保留版权信息.