今天在修改了某个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目录的作用的更多相关文章

  1. Tomcat中work目录

    Tomcat中work目录的作用: jsp运行时都要先转换成servlet,tomcat容器启动时会在目录下的work目录中生成一系列的文件夹和.java文件和编译后的.class文件. jsp最终转 ...

  2. IntelliJ和tomcat中的目录结构

    IntelliJ和tomcat中的目录结构   IntelliJ的官网帮助中心:http://www.jetbrains.com/idea/webhelp/getting-help.html   pr ...

  3. Android中各级目录的作用

    Android中各级目录的作用 一.目录结构  src目录---存放源代码文件   gen目录---ADT插件生成的文件,(自动生成) R.java文件  drawable类---给图片生产的ID  ...

  4. tomcat配置 —— 各个目录的作用

    tomcat各目录(文件)作用 tomcat-7.0.50解压版,主目录一览: 我们可以看到主目录下有bin,conf,lib,logs,temp,webapps,work 7个文件夹,下面对他们分别 ...

  5. 最全的 eclipse web 项目目录结构以及Tomcat的各个目录的作用

    本文会尽可能对 java web 项目的目录结构做出最详细的解释,尽量做到浅显易懂. eclipse web 项目目录结构   java web 项目事例 03-springmvc-drien-xgq ...

  6. tomcat的work目录的作用

    最近发现,很多网友喜欢把tomcat的work目录里的东西叫做缓存,其实那不是很恰当,work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录,这也正是为什么它 ...

  7. Linux系统中各目录的作用

    /binbin是binary的缩写.这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令.例如cp.ls.cat,等等. /boot这里存放的是启动Linux时使用的一些核心文件. /dev ...

  8. linux初级学习笔记二:linux操作系统及常用命令,文件的创建与删除和命名规则,命令行展开以及linux中部分目录的作用!(视频序号:02_3)

    本节学习的命令:tree,mkdir,rmdir,touch,stat,rm 本节学习的技能:Linux中主要的目录作用以及特殊的目录文件: 文件的命名规则,命令行展开: 文件的创建与删除: Linu ...

  9. linux中常用目录的作用

    /bin 存放使用者最长用的命令,如:cp.ls.cat,等等. /boot 启动linux时使用的一些核心文件.  /dev 是device(设备)的缩写,这个目录下是所有linux的外围设备. D ...

随机推荐

  1. EntityFramework整理

    最近公司项目需要,想要给订单增加一个状态修改记录. 说起来很简单的需求,但是做的时候,卡了我半天... 问题描述: 修改订单状态保存之前的时候,需要判断,如果新状态不等于旧状态,才做记录,但是在底层的 ...

  2. php 单文件上传

    php 单文件上传 通过 PHP,可以把文件上传到服务器. 创建一个文件上传表单 允许用户从表单上传文件是非常有用的. 请看下面这个供上传文件的 HTML 表单: Filename: 请留意如下有关此 ...

  3. 建立新的acticity需要的注意的问题

    首先需要我们在mainifests中进行注册, <activity android:name="com.special.residemenudemo.CameraActivity&qu ...

  4. POJ 3264 Balanced Lineup 【线段树/区间最值差】

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 62103 Accepted: 29005 Cas ...

  5. HDU 2567 寻梦(字符串,插入)

    #include<iostream> #include<stdio.h> #include<string.h> #include<cmath> usin ...

  6. Javascript 行为委托

    JavaScript 与C++,Java的面相对象编程的语言不同.就像不懂Linux人,会创造一个蹩脚的linux一样.一些JavaScript的编程总在尝试利用JavaScript 去模拟传统的面向 ...

  7. [Atcoder SHPC2018] Tutorial

    Link: SHPC2018 传送门 C: 一道看上去有些吓人的题目,不过$1e9$规模下的$n^m$代表肯定是可以约分的 可以发现能提供贡献的数对只有$2*(n-d)$种,那么总贡献为$2*(n-d ...

  8. python基础-匿名函数、内置函数、正则表达式、模块

    1. 匿名函数 1.1 有名函数 有名函数:定义了一个函数名,函数名指向内存地址:通过函数名进行访问.函数名加括号就可以运行有名函数,例如:func() def func(x, y, z = 1): ...

  9. 7.2(java学习笔记)URL

    一.URL URL类表示统一资源定位符,指向万维网上“资源”的指针. 资源可以是简单的文件或目录,也可以是对更复杂对象的引用,比如对数据库或搜索引擎的查询. URL即是定位也是资源,定位到网络中一个具 ...

  10. C语言计算器

    地址:  https://wenda.so.com/q/1371173683061754?src=140