Tomcat 如何向web.xml配置的错误页面发送servlet响应

Tomcat 如何向web.xml配置的错误页面发送servlet响应,tomcat,servlets,custom-error-pages,Tomcat,Servlets,Custom Error Pages,我正在使用Tomcat。我在web.xml中定义了一些,并将404错误映射到页面/error/error.jsp。我需要检测资源是否存在,如果资源不可用,则将响应状态设置为404 response.setStatus(404); 但是Tomcat没有重定向到我定义的404页面,所以我的问题是,是否有任何API可以获取web.xml中定义的页面位置?我不想自己解析web.xml。不,没有API。该设置是Tomcat的内部设置,它不会将其直接暴露给外部世界。(正如您所说,您可以解析web.xml—

我正在使用Tomcat。我在
web.xml
中定义了一些
,并将
404
错误映射到页面
/error/error.jsp
。我需要检测资源是否存在,如果资源不可用,则将响应状态设置为404

response.setStatus(404);

但是Tomcat没有重定向到我定义的404页面,所以我的问题是,是否有任何API可以获取
web.xml
中定义的页面位置?我不想自己解析
web.xml

不,没有API。该设置是Tomcat的内部设置,它不会将其直接暴露给外部世界。(正如您所说,您可以解析web.xml——因为它是xml,所以编写一个XQuery来提取它很简单)

另外,我认为你似乎对这到底应该如何工作感到困惑。您向Tomcat提供一个URI,它将使用该URI为404响应的HTML主体提供服务。它需要能够将这个URI解析为实际的资源,就像它是在请求中提供的一样。因此,在许多情况下,您不需要servlet来检测资源是否存在-您需要servlet来包含要提供的资源。例外情况是,如果使用Tomcat为某些URL提供静态文件系统数据,我相信这是可能的,尽管很少使用

如果您设置了一个没有servlet的Tomcat,那么您希望它提供什么服务呢?你到底希望它从哪里得到你的
error.jsp
页面?你希望它怎么知道?您需要做的是向Tomcat添加至少一个servlet(包含
error.jsp
文件),然后确保web.xml将
/error/error.jsp
URL映射到此servlet(并且资源位于servlet的error子目录中)

完成此操作后,您应该能够手动转到,例如
http://localhost:8080//error/error.jsp
并提供响应(可能有一些奇怪的内容,因为没有实际的异常,但应该找到文件)。类似地,如果在web.xml中正确设置了error page指令,则转到umap URL(例如
http://localhost:8080//asdfghjasgh
)应将错误页面显示为404响应。

只需与。例如

servletcontainer随后将显示适当的errorpage


注意:
return
语句不用于装饰。这将避免同一方法块中的代码残留将继续运行,并可能在appserver日志中产生
IllegalStateException
s!初学者通常认为像
sendRedirect()
forward()
sendError()
等方法在调用时会自动退出方法块。因此,情况并非如此;)

也许可以提供更多的信息,以便我们能够解决问题本身。因为知道错误页面可能没有帮助。谢谢你的回答,我知道这个问题看起来有点奇怪,我正在设计一个框架,servlet实际上是将请求发送到合适的操作。
File resource = new File(path, name);
if (!resource.exists()) {
    response.sendError(HttpServletResponse.SC_NOT_FOUND); // Sends 404.
    return;
}