【问题标题】:Tomcat server, change default HTTP 404?Tomcat 服务器,更改默认 HTTP 404?
【发布时间】:2015-03-07 17:15:00
【问题描述】:

我正在使用 tomcat,并且我希望,每当我转到一个不由 servlet 处理的方向时,除了显示默认错误之外,还可以做其他事情:

type Status report

message /test

description The requested resource is not available.

我在哪里可以处理这个¿?

提前谢谢你

【问题讨论】:

标签: http tomcat http-status-code-404 directory-structure


【解决方案1】:

在 web.xml 中定义一个错误页面:

<error-page>
 <error-code>404</error-code>
 <location>/path/to/your/page.html</location>
</error-page>

更新

  1. No 不需要任何规范。可以是任何东西,html、jsp、jsf ...
  2. 没有
  3. 可以放置在任何地方,通常在底部
  4. 括号之间

您可以通过其 http 状态(404、500、...)或通过定义完全限定的异常名称(java.lang.Exception、java.io.FileNotFoundException ...)来定义错误页面。如果您使用的是 Servlet 3.x,您甚至可以省略 error-code/error-classname 部分来定义默认错误页面。

【讨论】:

  • 错误页面是否需要以某种方式具体¿?任何标题或特殊的东西¿?还有其他问题,它应该放在 web.xml 的什么位置?在什么括号之间¿?还是就在最后¿?谢谢
  • 您可以将其放置在 web.xml 中 内的任何位置。标题会自动应用。路径是相对于 WebRoot 的。
【解决方案2】:

这是一个最小的web.xml,您可以将其放入 webapps 文件夹中(如果您不想全局更改 404 页面)。这将允许您例如将所有请求重定向到新文件夹。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

  <error-page>
    <error-code>404</error-code>
    <location>/redirect.jsp</location>
  </error-page>
</web-app>

注意web.xml必须放在.../webapps/YourFolder/WEB-INF/web.xml中。

在redirect.jsp。你可以这样写:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
    <title>Moved</title>
</head>
<%
    // get the requested URI
    String requestedLocation = request.getRequestURI();
    // rewrite to new location
    String newLocation = requestedLocation.replaceAll("^/Old", "/New");

    // 301 - permanent redirect
    response.setStatus(response.SC_MOVED_PERMANENTLY);
    response.setHeader("Location", newLocation);
%>
<body>
&rarr; <a href="<%=newLocation%>"><%=newLocation%></a>
</body>
</html>

【讨论】:

  • 但是redirect.jsp去哪里了?
【解决方案3】:

自 Tomcat 9 起有不同的错误处理配置。

你必须:

  • 创建简单的html错误页面
  • 将其保存在某个目录中(例如 webapps/ROOT/error_page.html)
  • 在 Host 部分的 server.xml 中添加阀门配置。
<Valve className="org.apache.catalina.valves.ErrorReportValve" errorCode.404="webapps/ROOT/error_page.html" errorCode.0="webapps/ROOT/error_page.html" showReport="false" showServerInfo="false" />

请参考:https://stackoverflow.com/a/55702749/2532710 或 Tomcat 文档:https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 2021-04-17
    • 1970-01-01
    • 2014-07-20
    • 2020-07-31
    • 2023-04-07
    • 2023-03-03
    相关资源
    最近更新 更多