前面附录1已经详细介绍了动态文件执行的流程,动态文件必须先转换成java文件再编译后才能执行,但是编译动态文件很耗资源,为此提供了autoCompile这个设置(参见2.4和2.5节)。当关闭了autoCompile时就必须手动上传已编译的class文件了(附录1中详细介绍了关闭autoCompile时的流程),于是问题就来了当一个web应用很大,有很多动态文件,要将这些动态文件编译成class文件的方法就是在其它开启autoCompile的服务器上逐个访问动态文件。这似乎很麻烦,于是服务器提供了一个重新编译某个主机或虚拟主机的工具。
工具类全名为com.kangaroo_egg.tools. Rebuild,如果服务器安装在c:\webserver目录下则工具类位于c:\webserver\classes\com\kangaroo_egg\tools\Rebuild.class。在classes目录下会看到rebuild.bat和rebuild.sh,其中rebuild.bat是用于在windows下重新编译的脚本命令,而rebuild.sh是用于在redhat linux和Solaris下的脚本命令。不过现在还不能执行,首先必须配置一下这二个脚本命令。
1. 在windows下运行则打开rebuild.bat文件,你会看到如下内容:
图F3-1-1
注意红框内的XXX,请将此XXX换成JDK安装的目录,比如你的JDK安装在c:\jdk1.5下面则替换成如下内容:
图F3-1-2
之后就可以执行rebuild.bat,执行后控制台屏幕会显示“请输入需要编译的主机或虚拟主机号”的信息,并且等待用户输入,此时需要用户输入要编译的主机或虚拟主机号,这个是在webconfig.xml中mainHost和vHost中定义的(参见2.4和2.5节),比如我们要编译主机中所有动态文件那我们就输入0,输入后又会提示“是否需要隐藏源代码(按y需要隐藏,其它键无需隐藏)?”,这个是用于隐藏源代码功能,本章后面会有介绍,在这里我们先不需要,按其它键继续,工具提示隐藏代码功能为关闭的状态,最后就开始编译所选定主机的所有动态文件了。
所有编译后的文件都会存在主机或虚拟主机根目录下的WEB-INF\work\com\kangaroo_egg\workfile目录下(参见F1.1节),如果编译前此目录中已有文件(以前已编译的文件)则会全部删除后再重新编译。需要编译的动态文件是以webconfig.xml中mainHost和vHost的dhtmlExtName所定义的为扩展名。本编译工具也是多国语言的,所显示的语言是依据webconfig.xml中systemSet的regionSet设定(参见2.1节)。
2. 在linux和solaris下运行则打开rebuild.sh文件,你会看到如下内容:
图F3-1-3
同样注意红框内的XXX,请将此XXX换成JDK安装的目录,比如你的JDK安装在/jdk1.5下面则替换成如下内容:
图F3-1-4
之后就可以执行rebuild.sh,流程和前面介绍的一样。
注意:rebuild.sh属性必须是可执行,请在linux和unix下修改(修改方法参建linux和unix相关命令),否则将无法执行。 rebuild工具需要使用配置文件webconfig.xml,请确保配置正确。 |
许多用户希望保护自己的web应用,为此就需要不让其他人看到源代码,kangaroo-egg 服务器从一开始就考虑到了这个问题,为此提供隐藏源代码的方法。前面附录1已经详细介绍了动态文件执行的流程,动态文件只有最终编译成java的class文件后才能执行,因为class文件是编译后的文件所以看不到源代码,而含有源代码的只有动态文件和动态文件转换成标准的java文件,于是只要将这二个文件中源代码隐藏即可。那我们来看一下隐藏着二个文件会有什么后果。
隐藏动态文件代码(即将代码删除或改成其它的非代码信息)后服务器会发现动态文件已被修改,为此会重新编译动态文件,这是我们不想看到的,因为我们其实真正想用的是修改前已经编译过的动态文件。那么服务器是如何判断动态文件已被修改了呢?其实很简单,是看动态文件最后修改的时间,隐藏代码就会造成最后修改时间改动,所以只要在隐藏代码后将动态文件的最后修改时间再改为隐藏代码前的即可。
接下来就是隐藏动态文件转换成标准的java文件代码,服务器不会检测转换后java文件是否被修改,因此可以不用隐藏代码后修改最后修改时间,不过转换后java文件中会含有对应转换前的动态文件代码行数,因此在隐藏代码时需要保留这些行数信息,否则执行动态文件出错时就无法显示动态文件源代码出错的行数,如果无需提示出错行则直接删除转换后java文件也是可以的。不过我们还是建议保留,因为程序如在运行时出错则用户也能看到相对于源程序出错行,这样的话用户就可以将出错信息和出错行反馈给开发人员,以方便开发人员调试。
所以只要用上述介绍的原理去隐藏源代码就不会有任何问题,在隐藏源代码的同时又能保证程序运行正常。为了方便用户,rebuild工具提供了自动用上述方法隐藏源代码的功能,下一节将介绍使用方法。
如F3.1节中介绍的执行rebuild.bat或rebuild.sh,执行后控制台屏幕会显示“请输入需要编译的主机或虚拟主机号”的信息,输入需要编译的主机或虚拟主机号,输入后就会提示“是否需要隐藏源代码(按y需要隐藏,其它键无需隐藏)?”,这时就输入y,之后再次提示“警告:隐藏源代码操作会使源代码消失,请确认已经备份了源代码。是否继续(按y继续,其它键退出)?”的信息,因为启用这个功能会使源代码全部删除为此需要确认已备份了含有源代码的动态文件,输入y就会继续,输入其它内容就会退出。我们输入y后工具提示隐藏代码功能为开启的状态,最后就开始编译动态文件并且隐藏源代码。
rebuild.bat和rebuild.sh和run.bat和run.sh(参见1.2节)的内容很相似,其中一个就是都会使用到tools.jar这个文件,那么这个文件有什么用呢?要了解这个jar文件首先要了解java通常有二个版本JRE和JDK,JRE是运行java所需要的环境而JDK除了可以运行java外还可以开发java程序,所以JDK包括了JRE。只有JDK才含有tools.jar这个文件,因为此jar文件中含有将java程序编译成class文件的工具,所以JRE中不含有这个文件(因为JRE只能运行已编译的java程序而不能开发java程序,当然就不需要这个编译工具了)。
kangaroo-egg服务器需要使用JDK环境,因为需要编译动态文件所以需要tools.jar。rebuild.bat和rebuild.sh必须要用到这个文件,因为这个工具就是用来编译的。
然而启动服务器的脚本文件run.bat和run.sh是否必须用到此文件呢?换句话说kangaroo-egg服务器一定要用到tools.jar吗?其实不是的,当autoCompile(参见2.4和2.5节)关闭时DQM容器将永远不会编译动态文件,既然不编译那么也用不到tools.jar这个文件了,所以当确定autoCompile关闭的情况下启动脚本就可以改成如下:
在windows下run.bat改成如下内容:
图F3-4-1
注意红框内的XXX,请将此XXX换成JDK安装的目录,比如你的JDK安装在c:\jdk1.5下面则替换成如下内容:
图F3-4-2
linux和unix下请参照上面的修改方法修改run.sh脚本文件。
再深入想想,关闭autoCompile情况下是无需编译而只需要运行的,那么是不是可以只用JRE呢,答案是肯定的,如果你确认将来永远不需要开启autoCompile功能,那么你可以只安装JRE。