Jsp和Servlet修改代码时Tomcat的区别

来源:互联网 发布:淘宝联盟能使用红包吗 编辑:程序博客网 时间:2024/06/07 06:24

编写网络项目时发现一点,

JSP修改代码不用重启Tomcat就可以直接使用,而Servlet修改代码后要重新启动Tomcat才能生效,去网上查了许多资料,对jsp和servlet在tomcat的加载过程也了解了一点,但还是不太明白,现把目前学到的总结下吧,先不论正误,等以后学深了再来研究纠错。


首先说一下加载过程

Tomcat每次启动时都会加载部署在它上面的项目,部署的项目在webapp目录下。

在Tomcat中,项目的jsp文件不变,而java文件都存储成了class文件。经过实验,每次修改java文件代码,原项目文件目录下的class文件和webapp下该项目的class文件都修改了。

对于jsp,运行时要先编译成servlet,里面的一些代码放在生成的servlet的doservice方法里面,再编译成class文件运行。jsp编译的文件放在Tomcat的work目录下的Catalina目录下面

目前网上有两个版本的解释:

1.

servlet在Tomcat中都是单例多线程的,每次Tomcat加载项目时会生成对应的servlet的一个实例,即运行对应class文件在内存里面形成一个对象。该实例是服务器启动时生成的,以后servlet即使改变代码,Tomcat和项目目录里面的class文件发送改变,也不会影响这个实例。要想改变生效,必须重启Tomcat。

而jsp,貌似是Tomcat的加载机制不一样,我觉得从单独生成了一个work目录来存储jsp的编译文件也可以发现,对于每次浏览器请求访问jsp,Tomcat都会去检查work子目录里面的编译文件是否已经被改变,如果改变则重新编译,这样就不需要重启服务器了

2.

 另外一种说法是,修改实例的方法里面的代码不会造成实例的重新加载,而修改成员变量,增加成员方法则会需重新加载。

而jsp编译成servlet后是在doserive方法里面的,所以不需要重新重启Tomcat

这便造成了一点疑问,那在servlet的一个方法里面修改代码应该不用重启服务器也可以显示,但我实验后发现不行,但又很清楚的记得以前写代码的时候出现过修改servlet方法里面的代码(如加一条输出语句)没有重启也可以显示

这个解释暂且放在这吧,等以后学深了能够解释再来完善

0 0
原创粉丝点击