首页 > 代码库 > 修改 jsp 和 java 不重启 tomcat

修改 jsp 和 java 不重启 tomcat

 

 

========================1==============================

可以修改类不用重启Tomcat加载整个项目(手工启动)
配置reloadable=true(自动重载)
使用Debug模式,前提是仅限于局部修改。(修改类不用重启--热加载)

Tomcat轻小,而WebLogic、WebSphere对硬件要求比较高,吃内存、耗CUP。JBoss类更改不会重启(传说,我没用过,不知道!)。
在使用Eclipse+Tomcat开发Java项目的时候常常会碰到这样的情况,已修改Java文件Tomcat就会自动重启,接下来就是漫长的等待服务重启完毕。那其实大多数的Java文件修改是没有必要重启服务的,只有一些特定的Java文件,比如说只有重启服务的时候才会调用的Java代码才需要重启服务。
一修改java代码就重新部署(console有明显提示),且会话失效,设置服务器为debug模式(debug on server),否则修改不起作用.
什么时候应该redeploy,什么时候应该重启tomcat。如果项目大,redeploy和重启tomcat的系统开销是很大的,经常要等很长时间。
Tomcat运行时动态重载类, 实现重载功能的测试jsp。当系统中有很多类时,如果开启了Tomcat的reloadable=true,那么每当相关文件改变时,Tomcat会停止web app并释放内存,然后重新加载web app.这实在是个耗时的工程. 如果能有只重载某几个类的功能,将极大的满足我这个即时调试狂。

1.修改类不重启Tomcat(不用手动重启)
首先需要设置server.xml中的Context reloadable="true", true自动重载(不是重启!), false手动重载。(如果项目在Tomcat中,应该去Tomcat目录设置。)
Eclipse EE 设置方式,文件设置:server.xml > reloadable="false" 界面设置:Server > Modules > Edit > webapp > Auto reloading enabled > false
开发阶段通常都设为true,方便开发,在发布阶段应该设置为false,提高应用程序的访问速度。可以选择把其他不相关的项目先从webapps移出,这样tomcat加载的项目就少了,相应也就快了。
2.修改类不重启Tomcat有两种方式:热部署、热加载
热部署:容器状态在运行时重新部署整个项目。这种情况下一般整个内存会清空,重新加载,这种方式可能会造成sessin丢失等情况。tomcat 6确实可以热部署了,而且会话也没丢.
热加载:最好是在调试过程中使用,免得整个项目加载,Debug模式支持热加载。容器状态在运行时重新加载改变编译后的类。在这种情况下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法。
一般改变类的结构和模型就会有异常,在已经有的变量和方法中改变是不会出问题的(Eclipse、MyEclipse8、JBuilder、IntelliJ IDEA…)。
3.自动编译JSP
build Automatically
修改Tomcat源代码实现realoadable!不推荐~

===============================2==============================

eclipse下实现热部署,tomcat不重新reload context

1. 打开server的编辑器
2. 在modules页签内,修改auto load属性为disabled

-----------------------------------------------------------------------------------------------------------

以上两篇文章,是作者的一个引子,下面是作者原文:

myeclipse,eclipse都是个好工具,由于eclipse速度快,点内存小,相对家里那台老家伙,逼不得尔从myeclipse转为eclipse来开发,本来打算用IntelliJ IDEA的,但发现点内存也是相当的厉害,用了一天左右,相对来说也不是很有感觉,呵呵,那也难怪的,才一天,想有什么感觉呢?

但由于eclipse在修改类后并不会像myeclipse一样,自动热加载到tomcat的,要重新加载一次的,即重启多一次.重启时比较慢,及浪费资源及时间,何况本人操作ctrl+s的频率也是相当高的,基本上写几行就按一次,如果这样不停甘重启又重启tomcat也是相当的慢.于是google一翻,得出以下两个地址说可以修改的:

 

呵呵,都是javaeye博客里的文章,赞一下.但我在galileo这个版本里找来找去也找不到以上两个所说的路径,可能是版本不一致的原因,又或者真的是自己找不到吧.反正得出一个结论就是eclipse也是可以做到像myeclipse一样,修改了类后不用重新加载tomcat,当然,也会有可能出现加载不了的情况.此时可能是因为更改了类结构之类的.

参照以上的方法,发现在galileo这个版本的eclipse已经自带有服务器管理的了,在原来的servers窗口里添加tomcat即可启动,启动后会在工作空间目录下生成一个类似Server这样的文件夹,里有有一些tomcat里的配置文件,打开server.xml这个文件,找到以下行:

<Context docBase="工程名称" path="/" reloadable="true" source="org.eclipse.jst.j2ee.server:工程名称"/>

将reloadable="true"改为false,保存退出,以dubug的方式来重启tomcat,启动后再修改一下类,发现已经没有重新加载了.添加一行打印之类的,再打开页,打印已经出现.证明,已经能成功将修改后的类布署到tomcat上去了.

但,在第一次修改jsp页面后再打开的话会报一个异常,说什么类没有加载之类的,这里,再以dubug方式重启即可.


但感觉不太可靠似的,因为毕竟没经过长久的测试,如有更好的方式就告知!

=====================================
补充:
今晚在家里试了一试,按以上的办法貌似不行的,后来发现,先要将 reloadable="false" 这句先删除后,跑一次tomcat后,再停止,再恢复刚删除的那段,保存,再以dubug方式跑一次即可。有点神奇...不明所以!!