为什么在jsp更改时tomcat不需要重新启动



我已经使用JSP,Servlet很长时间了。我知道,每当我们在Servlet中更改任何内容时,都需要重新启动TomcatServer来获得更改。在JSP更改的情况下,tomcat不需要重新启动。

据我所知,JSP页面只有在编译时才能转换为Servlet。那么,毕竟是Servlet。那么,如果不重新启动Tomcat,它是如何工作的呢。

我知道JSP页面被编译的情况,比如服务器重启后的第一次访问等。

因为当Tomcat被要求执行JSP时,is会将JSP文件的修改日期与该JSP对应的已编译类的修改时间进行比较,如果是最近的,则会在执行之前动态重新编译。

这是BTW一个在生产中应该关闭的选项,因为执行此检查需要时间。

请参阅http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html详细信息。

因为默认情况下tomcat是在开发模式下启动的,这意味着在检测到更改时会重新编译JSP派生的servlet。JVM是如何加载新类的,这是一个很好的问题——可能是tomcat类加载器被配置为这样做的

几个相关的注意事项:

  • 您可以关闭生产的开发选项
  • 您也可以重新加载servlet——您必须在调试模式下用JVM启动tomcat

不仅JSP的一些容器还支持servlet类的重新加载(如果修改的话)。

由容器决定何时加载servlet。A servlet can be loaded at runtime on demand。来到JSP,JSP translated to servlet can also be loaded at runtime

说到你的问题,

为什么Tomcat不需要重新启动

这是因为Tomcat is capable of adding/modifying classpath to Web Application classloader at runtime。Tomcat将拥有他们的custom Classloader implementation which allows them to add the classpaths at runtime

自定义类加载器是如何工作的

实现这一点的一种方法是修改Servlet/JSP a new classloader is created for the Servlet/JSP with Application classloader as parent classloader . And the new classloader will load the modified class again

最新更新