Tomcat中work目录的作用

系统 1942 0

今天在修改了某个jsp后发现:tomcat容器启动后,访问该jsp返回的结果依然是修改之前的内容,略感不解,于是乎研究了一下Tomcat中work目录的作用。

 

Tomcat中work目录的作用:

  • jsp运行时都要先转换成servlet,tomcat容器启动时会在目录下的work目录中生成一系列的文件夹和.java文件和编译后的.class文件。
  • jsp最终转化为servlet,work的作用就是加快速度,如果jsp没有变化(依据时间戳)就不再重新编译。

 

看到这似乎豁然开朗了,之后看了一下work中文件的最后修改时间,居然比当前时间还大,由此判断有人在某时修改过系统时间(修改到了将来),而恰巧当时这个jsp页面进行了第一次的编译,所以产生了开头所描述的现象。

 

进一步研究一下jsp编译的相关内容:

当请求jsp页面时,Tomcat将请求交由JspServlet来处理,我们来看一下在JspServlet的service()方法
  boolean  precompile  =  preCompile(request); 
它会判断你请求jsp页面时有没有带?jsp_precompile查询字符串,如果带了就会重新编译
然后再由 serviceJspFile(request, response, jspUri,  null , precompile) 进一步判断是否要进行编译jsp文件,下面是JspServletWraper的service方法片段

 1   if  (options.getDevelopment()  ||  firstTime ) { 
 2     synchronized  ( this ) { 
 3       if  (firstTime) { 
 4         firstTime  =   false
 5       }
 
6     ctxt.compile(); 
 8    
 9  

关键就在Compiler的isOutDated(boolean checkClass) 的判断上 。
判断标准是:如果jsp文件最后修改时间晚于目标文件的最后修改时间要重新编译。还有一种情况是即使jsp的最后修改时间早于目标文件的最后修改时间,但只要jsp中用了include指令包含的某个文件的最后修改时间晚于对应目标文件的修改时间的话,也需要重新编译主jsp文件。

Tomcat中work目录的作用


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论