为啥我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404?
Posted
技术标签:
【中文标题】为啥我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404?【英文标题】:Why is my Tomcat server throwing intermittent 404's when compiling JSP's?为什么我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404? 【发布时间】:2015-08-11 01:35:37 【问题描述】:我需要帮助弄清楚为什么我的几个 Web 应用程序在尝试启动 JSP 时会间歇性地抛出 404 错误。其中一个具有直接访问的 JSP,另一个具有转发到 JSP 的 servlet。这些页面大部分时间都可以正常工作,但偶尔会抛出 404。如果用户刷新浏览器 1-3 次,页面将重新开始工作,无需进行任何更改。
这是在网络浏览器 (Chrome) 中看到的错误示例:
type: Status report
message: /app_root/my_page.jsp
description: The requested resource is not available
问题似乎与重新编译 JSP 页面有关。 .war 文件和扩展目录没有改变。每个 404 错误对应的日志中始终存在三个错误:
WARNING: Failed to delete generated class file [D:\Apache Software Foundation\Tomcat 7.0\work\Catalina\localhost\app_root\org\apache\jsp\my_005fpage_jsp.class]
May 19, 2015 6:32:24 AM org.apache.jasper.compiler.Compiler removeGeneratedFiles
WARNING: Failed to delete generated Java file [D:\Apache Software Foundation\Tomcat 7.0\work\Catalina\localhost\app_root\org\apache\jsp\my_005fpage_jsp.java]
May 19, 2015 6:32:24 AM org.apache.jasper.compiler.Compiler generateJava
WARNING: Failed to delete generated Java file [D:\Apache Software Foundation\Tomcat 7.0\work\Catalina\localhost\app_root\org\apache\jsp\my_005fpage_jsp.java]
我在 Tomcat 7.0.53 上运行 Java 1.7。 Tomcat 在 Windows 2008 R2 服务器上运行。
这是我迄今为止尝试过的,基于我从谷歌找到的信息。但是,404 仍在继续。
-
对整个 Tomcat 目录禁用 Windows 索引
在我的生产环境中关闭了开发模式
我的 QA 环境中的 modifyTestInterval 从默认(4 秒)增加到 3600(1 小时)[注意:它当前设置为 0 以尝试帮助我重现问题]
将 Tomcat 工作目录的所有者更改为与运行服务的 id 相同的 id。
我正在关闭工作目录的防病毒软件,看看是否有帮助。
虽然我的 prod 和 QA 服务器上发生了此问题,但我的本地 Tomcat 实例上没有发生此问题。事实上,即使在运行 QA 和 Prod 应用程序时,我还没有从我的工作站看到问题。这个问题只有其他人看到过。
【问题讨论】:
您是否以运行 tomcat 的用户身份登录时尝试手动删除生成的类文件? 我只是尝试手动执行此操作。只要我使用管理权限执行此操作,它就可以工作 - 使用管理员权限打开 cmd 或在通过 Windows 资源管理器删除时回答弹出窗口。 禁用病毒扫描没有帮助。进一步的测试表明,这个问题只发生在 servlet 转发到 JSP 时。直接访问 JSP 可以正常工作。我只是更改了工作目录,以使 tomcat 服务帐户具有明确的完全控制权。这允许我删除具有该 ID 的文件,而无需授权管理员访问。 【参考方案1】:Tomcat 容器缓存由 JSP 解析器生成的 .java 和 .class 文件,供 Web 应用程序使用。有时这些会损坏或找不到。这可能发生在包含对 JSP 修改的补丁或升级之后。
解决办法就是直接删除工作目录,重启tomcat
【讨论】:
【参考方案2】:在我们的实时服务器上部署 .war
后,我遇到了同样的问题。这些是我解决问题所遵循的步骤:
1)关闭tomcat服务器
2) 转至 <your tomcat directory> -> work -> Catalina -> localhost -> <your project> -> org -> apache -> jsp ->
3) 手动删除 .class
和 .java
4) 从存在 webapps 文件夹问题的网站中删除 .war
文件和已部署的文件夹。
5) 导出一个新的 .war
,并将其放入 webapps 文件夹中。
6)再次启动tomcat服务。
一旦服务器完成部署,它会自动在“work”目录中重新生成已删除的文件,并且网站应该可以再次可用,而不会出现间歇性 404 错误。
我希望它也对你有用。
【讨论】:
【参考方案3】:检查此文件或文件夹的权限。通常这个问题是由于无法访问文件夹造成的。
【讨论】:
以上是关于为啥我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404?的主要内容,如果未能解决你的问题,请参考以下文章
eclipse3.4中为啥修改jsp和java文件时需要重启服务器