我们知道JSP页面在WEB服务器上会被编译成class文件,如果修改JSP文件那么就会生成新的class文件。但这些同样的class是如何被加载到服务器中的呢,一个ClassLoader只能加载一次同名类,而JAVA又没有卸载类的概念。那么我是不是要在每生成一个新的同名class的时候都要定义一个新的不同的ClassLoader才能加载这个被修改过的类呢?那么一些WEB服务器是如何做到的呢?

解决方案 »

  1.   

    最简单的方式就是用程序判断class文件有没有变化,有变化就重启,tomcat貌似就是重新启动了
      

  2.   

    需要动态加载的类不能放到classpath里。
    使用 java.net.URLClassLoader 手动载人
      

  3.   

    新创建一个 ClassLoader,然后 Thread.currentThread().setContextClassLoader();Web 应用程序的主要的类加载器就是这个 ContextClassLoader。
      

  4.   

    如果每变化一次我就要创建一个ClassLoader,那我是不是进程中有很多加载器,这样会不会影响效率?也就是我有很多个class版本同时运行在不同的类加载器中。