5.1 设计思路
利用Java的URLClassLoader技术根据URL(class文件)来载入类,并依据类对象创建类对象的实例对象。首次创建时将类对象的实例对象存于Hash表中,再次执行该类时,就无需再通过class文件载入类并创建类对象实例对象了,而是直接从内存调用该类对象的实例对象。这样遵照“一次载入,多次重用”的原则,可以大大提高服务器的执行效率。
5.2 设计要点
(1)按照class文件载入类,并创建类对象的实例对象
(2)对类对象的实例对象的管理和调用
5.3 设计实施
(1)对于类对象的载入和创建类对象的实例对象,已经在上述段落3中进行了详细说明,在此不再重复。
(2)对于类对象的实例对象的管理和调用
从代码中可以看出,本设计中采用Hashtable对类实例代码进行管理。以类名为key,以类对象的实例对象(指针)为value。类对象的实例对象并不总是只创建一次,当jsp源文件存在更新时,也要将内存中对应的类对象的实例对象进行更新。类对象的实例对象的创建规则有:
(A)当class文件新于jsp源文件,且以该类名为key的实体已经存在于Hashtable(由客户端处理线程管理)中(例如:该页面已经被访问过,且jsp源文件一直都没有更新过),则不需要重新创建实例对象,而是以类名为key从Hashtable中取出对应的类对象实例,并调用Init方法即可。
(B)当class文件新于jsp源文件,但以该类名为key的实体不存在于Hashtable中(例如:该页面已经被访问过,但是重新启动HTTP服务器),则需要创建该类的实例对象,并以类名为key,新的类对象的实例对象为value插入到Hashtable中。
(C)当class文件旧于jsp源文件,但以该类名为key的实体已经存在于Hashtable中(例如:修改jsp源文件,且该旧的页面已经被访问过),则需要先从Hashtable中删除旧的记录,再重新编译jsp源文件生成class文件,并重新生成该类的实例对象,并以类名为key,新的类对象的实例对象为value插入到Hashtable中。
(D)当class文件旧于jsp源文件,且以该类名为key的实体并不存在于Hashtable中(例如:修改了jsp源文件,并重新启动HTTP服务器),则需要重新编译jsp源文件生成class文件,并重新生成该类的实例对象,并以类名为key,新的类对象的实例对象为value插入到Hashtable中。