为啥我的 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?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在eclipse中修改JSP后tomcat自动重启?

eclipse3.4中为啥修改jsp和java文件时需要重启服务器

JRE 如何足以让 Tomcat 处理 JSP 文件?为啥不是JDK?

在tomcat服务器下为啥我JSP接收不到表单数据?

为啥我的程序在使用 makefile 编译时会变慢?

为啥以下程序在使用 g++ 编译时会慢 15%?