Reputation: 1961
I am using tomcat and I would like, whenever I go to a direction that is not handled by a servlet, do other stuff insead of showing the default error:
type Status report
message /test
description The requested resource is not available.
Where can I handle this¿?
Thank you in advance
Upvotes: 10
Views: 53276
Reputation: 115
Since Tomcat 9 there is different error handling configuration.
You have to:
<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" />
Please refer: https://stackoverflow.com/a/55702749/2532710 or Tomcat documentation: https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve
Upvotes: 6
Reputation: 10042
Here is a minimal web.xml
which you can put in a webapps folder (if you don't want to change 404 pages globally). This will allow you to e.g. redirect all requests to a new folder.
<?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>
Note that web.xml
must be put in .../webapps/YourFolder/WEB-INF/web.xml
.
In the redirect.jsp
. You would put something like:
<?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>
→ <a href="<%=newLocation%>"><%=newLocation%></a>
</body>
</html>
Upvotes: 3
Reputation: 12462
Define an error page in web.xml:
<error-page>
<error-code>404</error-code>
<location>/path/to/your/page.html</location>
</error-page>
Update
You can define error pages by their http status (404, 500,...) or by defining the fully qualified exception name (java.lang.Exception, java.io.FileNotFoundException ...). If you are using Servlet 3.x you can even omit the error-code/error-classname part to define a default error page.
Upvotes: 17