tomcat - 我需要它将多个站点重定向到同一个错误页面
问题描述
我有一个运行在 Tomcat 上的应用程序运行良好。当我调用http://example.com:18080/app它工作正常。现在我创建简单的错误页面以在出现错误时重定向:
<html>
<head>
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
我将它添加到我的 web.xml
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
当我调用http://example.com:18080/app/blabla时,它会转到我的错误页面,但是当我调用http://example.com:18080/blabla或只是http://example.com:18080我需要它重定向到相同的错误页面。
有人知道怎么做吗?
谢谢
法比奥
解决方案
Servlet 规范要求错误页面位于 Web 应用程序的内部(参见错误页面)。所以你可以:
- 向所有应用程序添加相同的错误页面,
- 使用容器特定的机制而不是错误页面。
在 Tomcat 中ErrorReportValve
(参见文档)负责打印应用程序未自定义的错误消息。如果您的错误消息是一个简单的 HTML(例如“404.html”),您可以将其保存在任意位置(例如$CATALINA_BASE/errors
)并显式添加ErrorReportValve
到server.xml
:
<Host>
...
<Valve
className="org.apache.catalina.valves.ErrorReportValve"
showServerInfo="false"
errorCode.404="errors/404.html"/>
</Host>
但是,如果您想使用 JSP 或 servlet 来格式化错误页面,您需要:
- 通过将以下内容添加到以下内容,将元素添加
<error-page>
到所有应用程序$CATALINA_BASE/conf/web.xml
:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/errors/404.jsp</location>
</error-page>
- 在所有应用程序中挂载
$CATALINA_BASE/errors
文件夹。WEB-INF/errors
这可以通过将以下内容添加到 中的<Context>
元素来完成$CATALINA_BASE/conf/context.xml
:
<Context>
...
<Resources
className="org.apache.catalina.webresources.StandardRoot">
<PostResources
className="org.apache.catalina.webresources.DirResourceSet"
base="${catalina.base}/errors"
webAppMount="/WEB-INF/errors"/>
</Resources>
</Context>
推荐阅读
- opensql - 打开销售订单
- string - std::string、const 和线程安全
- javascript - 来自控制验证模式的 angular2+ 反应式
- spring - 我们可以为同一个控制器中的每个对象使用 BindingResult 吗?
- java - Java反射:访问内部类内部的私有方法
- javascript - 如何在猫头鹰轮播中显示分页点
- angular - 如何仅对角度 2+ 中的特定字段应用动态字段验证
- ios - UIPanGesture 识别器仅向一个方向滑动
- angular - Angular 单元测试中的模拟管道破坏了 ng-xi18n 命令
- verilog - 为什么以下时钟乘法 Verilog 代码对我不起作用?