zoukankan      html  css  js  c++  java
  • Tomcat中work目录的作用

    今天在修改了某个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文件。

  • 相关阅读:
    解题报告:POJ1852 Ants
    解题报告:POJ2573 Bridge(分析建模)
    POJ 3321 Apple Tree(树状数组模板)
    PAT1139 First Contact
    POJ3259 SPFA判定负环
    HDOJ2586 最近公共祖先模板
    树的直径与最近公共祖先
    字符数组_随机存储
    青鸟资料下载
    软件测试(4)_LoadRunner使用
  • 原文地址:https://www.cnblogs.com/qunyang/p/3230660.html
Copyright © 2011-2022 走看看