把一个已经编译好的工程文件放到tomcat下面,启动tomcat后,工程可以正常运行,当我把工程里面的某个class文件用另外一个正确的class文件替换后,没有重启tomcat,它为什么不执行替换后的class,还是照样执行已经被替换的class呢?
难道一定要重启tomcat 吗?

解决方案 »

  1.   

    这是tomcat类加载机制有关系
    需要配置server.xml中的reload
      

  2.   

    修改context.xml,给Context标签加上reloadable="true"属性就可以了。
      

  3.   

    我的工程在执行到一半时在tomcat的工程目录下生成一个新的class替换以前的class,接着就执行这个新生成的class;
    照上面各位说的方法,那我是不是要在工程执行到一半时,reload一下,再继续执行工程,这样好像不行吧,所以我想不重启tomcat直接执行新的class
      

  4.   

    大家帮忙看看,有没有其他办法,不重启tomcat
      

  5.   

    tomcat可否设置成debug模式,在debug模式下不知是否可行?
      

  6.   


    reload,难道还不清楚?不过据说hibernate在tomcat reload的时候不是放内存。。
      

  7.   

    是啊,一般情况下,修改了类文件,都需要重启,
    否则就要修改tomcat配置文件,在tomcat的安装目录下有一个文件夹,路径如下:
    Tomcat 5.0\conf\Catalina\localhost\,这个目录下有一个manager.xml文件,
    在里面把你的项目加载进去就好了,以后就不要重启tomcat了。
      

  8.   


    reload不行,我试过,你生成一个新的class必须等reload完了,再执行,客户操作的时候很显然不会等你reload完了,再进行下面的操作
      

  9.   


    我的是6.0的conf\下没有Catalina\localhost\
    不过在webapps\host-manager下有manager.xml文件是不是一样的
      

  10.   

    应该不需要重启,不过在server.xml中加入如下配置:1.在"<Service name="Catalina">"这一句的下面加入下面的代码
      <DefaultContext reloadable="true"/>2.如果还不行就在<Context>节点中加入 reloadable="true";
    <Context path=""   docBase=""  debug="1" reloadable="true">3.还不行就把tomcat安装目录下的work工作目录中你所对应的工程删除。
      

  11.   


    感谢你的方法,不过这个我知道,这是对class重新加载,我要的就是不要重新加载class,因为我在执行工程时,会生成好多新的class替换原来的class,如果生成一个class,reload一次,显然是不现实的,而且生成一个class后,你要等到reload完了,才能开始下一步操作。