Windows 下用 Tomcat 启动网络服务涉及的缓存问题

用 Tomcat 更新服务程序,无论如何看不到更新内容,卡了 4 个小时才解决问题。借机总结一下在 Windows 下用 Tomcat 启动网络服务涉及的缓存问题。


Tomcat 启动服务其实是这样的流程

1 Catalina启动。

2 扫描配置文件,加载指明的应用。

3 如果应用是压缩过的 .war 包,则会调用解压程序进行解压。

4 浏览器端根据地址,向 Tomcat 发送请求。

5 根据请求路径,Tomcat定位资源。

6 如果资源是 JSP 文件,则会访问对应的预编译 .class 。

7 Tomcat 把内容发送给浏览器。


  在这些步骤中,大家都知道第 4 步浏览器有自己的缓存机制,有可能并不会向服务器发送请求,而是会直接显示缓存内容。可以通过浏览器提供的“清除缓存”功能来清理这个缓存。

  熟悉 Tomcat 的人也会知道,第 6 步 Tomcat 也有自己的缓存机制。JSP 是通过翻译器翻译成 Java 程序源文件,在编译成 Java 程序(.class)来运行的,由于翻译和编译都是耗时较长的步骤,所以 Tomcat 会缓存由 JSP 文件生成的 .java 和紧随其后的 .class 。保存位置是 Tomcat 目录下边的 work 目录。我们可以通过删除 work 目录下边的文件来清除这个缓存。

  最近发现除以上二种缓存以外,今天发现第 3 步也有缓存存在。表现为用自己的解压工具看新 .war 文件,里边内容都是新的,可是经 Tomcat 发布到浏览器就都是旧文件。如果指定 .war 解压之后的目录为应用路径,则浏览器可以收到新内容。此现象能够再现。

posted on 2012-03-29 11:01  springside5  阅读(264)  评论(0编辑  收藏  举报