Tomcat中jsp热部署实现原理

    咱们知道在开发工程的时候jsp文件是即修改即生效的,因为比较好奇就研究了一下tomcat对于jsp热部署的实现原理,总结沉淀一下吧。java

    Tomcat  jsp热部署的实现原理大致是这样的,每一个JSP页面从上次访问到下次访问老是有默认几秒的缓存时间的也就说并非严格的即修改即生效tocmat7默认是有4秒的缓存延迟的缓存

    这个默认的缓存延迟是在类EmbeddedServletOptionsprivate intmodificationTestInterval = 4;这个属性定义的。tomcat

    若是过了4秒缓存时间即失效,这个时候tomcat就会读取jsp的modified时间戳和work目录下编译好的class文件的modified的时间戳做对比jsp

    若是相等则class文件没有过时,则不会从新编译jsp文件,若是过时了则从新将jsp编译成java,并进一步编译成class。同时调用JasperLoader来从新加载这个有jsp编译好的class文件。下面具体分析一下这个过程:spa

大致的类通讯时序图是这样的:对象

其中上文说的时间戳的校验逻辑主要封装在JDTCompiler的isOutDated方法里面,这个方法的主要源代码以下:开发

    其中第一个红框就是涉及到的N秒缓存逻辑,若是缓存没有失效,则不会从新加载,这个ctxt.getOptions()获取到的实际上是EmbeddedServletOptions类,这个类默认定义的时间间隔是:部署

    在实验的时候我比较好奇就收到把这个值改成了40,果真jsp并无及时生效,而是过了40秒以后才生效。get

    第二个红框检测的是获取work目录下的class文件的对象io

    第三个红框就是比较class文件的时间戳和JSP文件的时间戳,若是不相等则从新编译加载(上面时序图的流程)。这个就是jsp的热部署流程!

相关文章
相关标签/搜索