xijunhu1982 2008-10-07 20:53
浏览 201
已采纳

关于tomcat的一个问题

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

我的工程在执行到一半时在tomcat的工程目录下生成一个新的class替换以前的class,接着就执行这个新生成的class;
如果要重启tomcat,那我不是要在工程执行到一半时,reload一下,再继续执行工程,这样好像不行吧,所以我想不重新加载class,而直接执行新的class
不知是否可行?
[b]问题补充:[/b]
to bluespring :其实我就是用的你方法,我生成一个新的class的时候,程序可以执行这个class,我遇到的问题是:当我第二次来生成与已经执行过的class同名的新的class时,替换这个class后,程序还是执行的以前的class,所以还要reload一下。

  • 写回答

2条回答 默认 最新

  • bluespring 2008-10-08 13:55
    关注

    对于java虚拟机而言,一个class被classLoader加载一次后就会常驻内存知道虚拟机终止。
    你修改后的class不会再次加载

    而weblogic等web容器重新实现了classLoader能够支持热部署即重新加载修改的class,
    网上所谓的tomcat热部署不过是重启被修改class的应用而不重启整个tomcat,不能实现你的需求
    所以在tomcat下修改class是无论如何都做不到热部署的

    只能另想办法

    如果你的class只修改一次或固定几次,用Interface的方式调用

    Interface YourIface;

    Class yourOldClass implement YourIface;

    YourIface obj=new YourOldClass();

    使用了一些 YourIface的方法;//oldClass

    创建新的class,class实现YourIface

    Class yourNewClass implement YourIface;

    obj=new YourNewClass();

    使用了一些 YourIface的方法;//newClass

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题