tomcat 5.0.9覆盖404错误页面声明而无需访问服务器 - 需要自定义404消息

时间:2012-03-25 16:10:55

标签: tomcat override http-status-code-404 rhino

首先,让我说我不是Java程序员或者非常熟悉Tomcat,所以请耐心等待:)我正在使用在Apache Tomcat 5.0.9上运行的SaaS应用程序。我无权访问服务器配置文件,也无法添加.jsp文件。

我所处的情况是我有一个在Mozilla Rhino环境中运行的脚本,我可以访问以下两个对象:

org.apache.coyote.tomcat5.CoyoteRequestFacade   org.apache.coyote.tomcat5.CoyoteResponseFacade

我需要将状态设置为SC_NOT_FOUND(404)并提供自定义消息。问题是,无论我做什么,如果状态是404,我会收到供应商设置的“丑陋”404错误消息。我尝试过使用“sendError”,“setStatus”,我尝试过调度程序并重定向到另一个页面,同时将状态设置为404,我尝试了一个包装但不确定我在做什么,而且我已经看过有关过滤器的信息,但不知道如何在这种情况下应用它,或者即使这是正确的方法。

同样,似乎只要设置了404,Web服务器就会提供它自己的页面。我假设这是一个“错误页面声明”,我无法覆盖。我已经阅读了这个问题How to get the message in a custom error page (Tomcat)?(以及其他许多人),但我不明白这一点足以将信息转化为我的特定情况。

那么,是否可以通过编程方式“覆盖”错误页面声明?或者,考虑到我所处环境的限制,如何返回404错误自定义错误页面?在这一点上,我会解决纯文本 - 不一定要花哨。我只需要一些方法来使用404状态显示“用户友好”消息。

非常感谢任何帮助!

P.S。我应该提一下,这种方法的原因是所讨论的页面将被搜索引擎和人类消费(可能)。我需要404以便搜索引擎从其缓存中删除页面,我需要“漂亮”的消息来告诉人类因为不再可用页面需要采取的步骤。

1 个答案:

答案 0 :(得分:2)

Tomcat正在解释您的404状态并显示带有错误消息或堆栈跟踪的标准错误页面。

如果使用response.sendError(404, "Your error message here")对您不起作用,那么您需要查看使用自定义错误页面 - http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q6,但这取决于您可以修改web.xml这一事实 - 说你做不到。

现在您可以返回一个正常的HTTP状态代码(200),以及要显示的格式错误的内容

如果使用响应的客户只是一个附有人类的浏览器,那么他们就不会更聪明了。

另一方面,如果使用它的客户端是某种机器(脚本,另一个程序等)并且它们正在根据响应代码执行逻辑,那么这对你来说不是一个好的解决方案,因为返回200状态代码,你说一切都好(而不是错误代码 - 4xx或5xx)