当前位置: 首页 > 知识库问答 >
问题:

Tomcat 未重定向到 400 错误请求自定义错误页面

苍阳成
2023-03-14

我们有Tomcat 9 Web服务器在生产中。我们面临的问题是,如果Tomcat收到任何格式错误的URL,我们希望显示我们应用程序的自定义错误页面,如下所示

http://URL/|

http://URL/[

我在Tomcat应用服务器的web.xml中添加了错误页面标签,如下所示

<error-page>
   <error-code>400</error-code>
   <location>/error.html</location>
 </error-page>
 <error-page>
   <error-code>404</error-code>
   <location>/error.html</location>
 </error-page>

我们在tomcat的webapps目录下的应用程序根文件夹中有error.html。

每当用户试图请求任何不存在的网页时,他都会收到与上述404错误代码正确对应的错误页面。

真正的问题是,当用户在浏览器中输入格式错误的URL时,Tomcat无法重定向到error.html,例如超文本传输协议://URL/|

Tomcat显示的是默认的400错误请求错误页面,而不是自定义错误页面。

共有3个答案

甄煜
2023-03-14

您可以编写自己的错误页面https://aspiresoftware.in/blog/catalinatomcat-custom-error-report-valve-to-handle-errors-exceptions/

你必须把你的罐子放在汤姆卡特图书馆里。

郑佐
2023-03-14

下面是以下示例配置,https://stackoverflow.com/a/55702749/2532710 以节省其他人的时间。在服务器中.xml在主机标记中:

  <Valve className="org.apache.catalina.valves.ErrorReportValve"
        errorCode.400="webapps/ROOT/error400.html"
        errorCode.0="webapps/ROOT/errorOthers.html"
        showReport="false"
        showServerInfo="false" />

把静态html错误400.html...错误其他.html在 webapps/CATALINA_BASE 的根中。

和和煦
2023-03-14

这不是错误,而是配置问题。

Tomcat 9改进了错误处理,以便将更多错误,特别是在请求处理开始之前发生的错误,传递给标准错误处理机制,而不仅仅是返回错误代码

在格式错误的URI的情况下,Tomcat无法解析URI,因此URI无法映射到Web应用程序。因此,Tomcat无法触发应用程序级别的错误处理,因为它无法识别应用程序。在这种情况下,错误由Error ReportValve处理,该错误可以在server.xml.中配置

Error ReportValve最近增加的一个功能是能够以与每个Web应用程序错误页面配置类似的方式,为每个状态代码和/或异常类型定义静态网页(即没有Servlet或JSP,只有超文本标记语言)。

示例错误报告阀门:

<Valve className="org.apache.catalina.valves.ErrorReportValve"
        errorCode.400="webapps/ROOT/error400.html"
        errorCode.0="webapps/ROOT/errorOthers.html"
        showReport="false"
        showServerInfo="false" />
 类似资料:
  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我们已经部署了一个ASP。NET MVC应用于Azure应用程序服务。 如果请求耗时超过230秒,Azure将返回错误页面“500-请求超时。web服务器未能在指定时间内响应。”-https://stackoverflow.com/a/38676086 我们正在进行更改,以确保对网络请求进行更少的处理,但是仍然有可能达到这些限制。有人知道是否有一种方法可以配置自定义错误页面来显示,而不是下面显示的

  • Flask 自带了很顺手的 abort() 函数用于以一个 HTTP 失败代码 中断一个请求,他也会提供一个非常简单的错误页面,用于提供一些基础的描述。 这个页面太朴素了以至于缺乏一点灵气。 依赖于错误代码的不同,用户看到某个错误的可能性大小也不同。 通常的错误代码 下面列出了一些用户经常遇到的错误代码,即使在这个应用准确无误的情况下也可能发生: 404 Not Found 经典的“哎呦,您输入的

  • 我正在开发一个API网关,将请求重定向到一些微服务。这是application.properties文件的一部分: 我正在尝试重定向来自API网关的请求(http://localhost:8080/PetApp/auth/login)到正在运行的服务(http://localhost:8086/PetApp_Auth/auth/generateToken)我已经和邮递员一起将请求直接发送到微服务,

  • 这应该很简单。我修改了项目的web.xml,以便显示我自己的500错误页面: 然后我写了最简单的servlet来测试它: 然后完全忽略自定义页面(位于根目录),而是获得默认的 Tomcat 错误页面。 我使用的是MyEclipse调试器附带的Tomcat 6版本。我已经三重检查了拼写错误,但我找不到任何异常。我想知道错误页面标签是否需要在文档的某个部分。有谁知道可能出了什么问题? *编辑:这是请求