小编Mr *_*eph的帖子

Apache Tomcat 上的自定义错误页面

我正在运行带有 2 个自定义 servlet 的 Apache Tomcat 服务器。树结构看起来像:

$CATALINA_HOME/webapps/
         ROOT/
           WEB-INF/
         servlet1/
           META-INF/
           WEB-INF/
         servlet2/
           META-INF/
           WEB-INF/
Run Code Online (Sandbox Code Playgroud)

我正在尝试为每个 servlet 添加一个自定义错误 html 页面,该页面将显示在错误 400、404 上以及当 servlet 出现异常时(例如应该在 http 请求中发送给 servlet 的信息是不在那里)

我添加到 $CATALINA_HOME/webapps/servlet1/WEB-INF/web.xml

 <error-page>
   <error-code>400</error-code>
   <location>/error.html</location>
 </error-page>
 <error-page>
   <error-code>404</error-code>
   <location>/error.html</location>
 </error-page>
 <error-page>
   <exception-type>java.lang.Throwable</exception-type>
   <location>/error.html</location>
 </error-page>
Run Code Online (Sandbox Code Playgroud)

error.html$CATALINA_HOME/webapps/ROOT/. 这似乎不起作用。当我输入“www.server.com/servlet1/SomRandomStuff以获取 404 时,会显示一个空白页面,而不是 error.html。当我调用 servlet 而不将正确的信息传递给它时,还会发生其他事情,浏览器会询问我是否要下载文件。
我我试过error.html不放在ROOT而是放在 servlet1 目录上。没有工作。我检查了error.html具有正确的权限,没关系。我没有想法,我在网上找到的几个教程非常模糊。

我究竟做错了什么?我如何实现这一点 - 为每个 servlet 显示一个自定义错误页面?

感谢您的帮助。

tomcat custom-errors

4
推荐指数
1
解决办法
6万
查看次数

在 Apache 中的不同 VirtualHosts 上显示自定义错误页面

我有一个反向代理 Apache,它将请求移动到 Tomcat servlet。Apache中虚拟主机上的配置是:

<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1

ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

本质上,如果涉及到10.10.10.10和 requests ,则将其/Site1/ServLet1路由到/Site1/ServLet1.

如果我添加

<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1
ErrorDocument 404 /customerrors/site1/404.html

ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

所以它会显示一个自定义错误site1(我设置了 ErrorDocument),它将被提供给两者。

如何在每个站点维护这种配置的情况下拥有不同的 404 错误页面?

谢谢

编辑:

如果我根据以下评论修改配置,例如:

<Location /Site1/ServLet1/>
ProxyPass http://1.1.1.1/Site1/ServLet1
ProxyPassReverse http://1.1.1.1/Site1/ServLet1
ErrorDocument 404 /customerrors/site1/404.html
</Location>
Run Code Online (Sandbox Code Playgroud)

然后我仍然可以到达http://1.1.1.1/Site1/ServLet1但没有显示任何错误页面

reverse-proxy virtualhost custom-errors apache-2.2

4
推荐指数
2
解决办法
9040
查看次数