Tomcat服务器,如何更改默认的HTTP 404页面?

10
我正在使用Tomcat,希望在访问未被Servlet处理的网址时,执行其他操作而非展示默认错误页面。
type Status report

message /test

description The requested resource is not available.

我应该在哪里处理这个问题?

先行感谢。


@jas_raj,这不是重复问题,因为这里的人们想要解决的是docroot文件夹的问题,而应用程序已经有了自定义的404页面,但应用程序根目录在docroot下面。 - mckenzm
3个回答

17

在 web.xml 文件中定义错误页面:

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

更新

  1. 无需任何特殊设置,可以是任何内容,包括HTML、JSP、JSF等。
  2. 没有
  3. 可以放置在任何位置,通常放在底部。
  4. 在方括号之间。

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


错误页面需要特别说明吗?需要添加任何标题或特殊内容吗? 另外一个问题是,在web.xml文件中应该放在哪里?放在哪些括号之间?还是放在最后?谢谢。 - aDoN
1
您可以将其放置在web.xml中的<web-app>任何位置。标题会自动应用。路径相对于WebRoot。 - Paul McClean

3

这是一个最小的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 应该放在哪里? - coder_3476
问题在于它需要放在webapps文件夹中。如果我有一个自定义的404页面,如example.com/myapp/crap,但没有example.com/crap,那么我该怎么处理docroot? - mckenzm

2

自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://dev59.com/glQJ5IYBdhLWcg3w66bM#55702749 或 Tomcat 文档:https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接