我一直在使用JSP,Servlet
已经有一段时间了。我知道,只要我们在Servlet
中更改了任何内容,我们就需要重新启动Tomcat服务器以获取更改。在JSP更改的情况下,tomcat不需要重新启动。为什么tomcat在jsp变更时不需要重启
根据我的知识JSP
只有在编译时才将页面转换为Servlet
。因此,毕竟它的一个Servlet
。所以,它是如何工作,而不需要Tomcat
重新启动。
我的案件时认识一个JSP页面被服务器重新启动后第一次访问编译像等
我一直在使用JSP,Servlet
已经有一段时间了。我知道,只要我们在Servlet
中更改了任何内容,我们就需要重新启动Tomcat服务器以获取更改。在JSP更改的情况下,tomcat不需要重新启动。为什么tomcat在jsp变更时不需要重启
根据我的知识JSP
只有在编译时才将页面转换为Servlet
。因此,毕竟它的一个Servlet
。所以,它是如何工作,而不需要Tomcat
重新启动。
我的案件时认识一个JSP页面被服务器重新启动后第一次访问编译像等
因为默认情况下,tomcat以开发模式启动,这意味着在检测到更改时重新编译JSP衍生的servlet。这是一个很好的问题,JVM如何加载新类 - 可能是tomcat classloader被配置为这样做。
一些相关的注意事项:
因为当Tomcat要求执行JSP,是比较与JSP文件的修改日期与此JSP相对应的已编译类的修改时间,如果更新,则会在执行它之前即时重新编译。
这是BTW应该在生产中关闭的选项,因为执行此检查需要时间。
查看http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html了解详情。
是的,但应该有一些JVM加载新类的方法。默认情况下它没有。我认为这是允许它的tomcat的自定义类加载器。 – Bozho 2012-03-13 09:57:48
@:JB谢谢..我知道它比较了JSP文件的最后修改日期和编译后的类,以决定是否重新编译。 – 2012-03-13 11:41:14
不只是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
。雄猫将拥有他们的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
。
'当检测到变化时' - tomcat如何决定有变化? – 2016-09-13 08:36:01