以下是要求:
到目前为止,这个想法是扩展WebappClassLoader(catalina.jar)以创建自己的自定义类加载器,并将其作为Loader元素在context.xml中注册。使用一些代码,您可以很好地编写类加载器,谁将知道在哪里找到java源文件,然后在需要时将它们编译成类文件,然后在被要求时将它们加载到内存中。逻辑简单明了。
除外:
Jasper将如何知道自动化 - 找到由您的自定义类加载器生成的类,以便它可以编译引用它们的JSP,甚至可以动态刷新它们(您的类)?难道不可能实现吗?
您怎么看?
(请不要试图通过指向许多为您处理此类事情的现有框架来分散对话。要求非常具体:没有框架,没有任何内容)
答案 0 :(得分:0)
可以在当前的Web应用程序上下文(context.xml)中添加一个类加载器:
<Context>
<Loader loaderClass = "gr.nevma.cccl.CompilingClassLoader"/>
</Context>
然后创建一个类加载器:
package package gr.nevma.cccl;
import ...
public class CompilingClassLoader extends WebappClassLoader {
public CompilingClassLoader ( ClassLoader parentClassLoader ) {
super( parentClassLoader );
}
public Class<?> loadClass ( String className, boolean resolve ) throws ClassNotFoundException {
Class<?> theClass = null;
// Do you stuff here
return theClass;
}
}
但是,只有通过调用ClassLoader :: loadClass(...)才能从类加载器本身显式加载类,这才有用。这对Jasper的JSP编译没有帮助。这意味着当Jasper尝试编译使用由此类加载器加载的类的JSP时,编译将失败,因为Jasper甚至不会要求此类加载器加载任何类。
因此,通过这种方式,可以实现类的自动加载和重新加载,但是以某种方式 - 手动方式。这些类可以在整个Web应用程序中统一使用,即JSP页面!