我注意到,在Jetty(Servlet容器)上,默认情况下,如果出现错误,整个Stack回溯被发送到浏览器,这对于实时环境。自定义错误页面在Jetty中不起作用
所以我创建了一个“servlet-error.html”文件,并将其包含在我的web应用程序中,并从web.xml引用它。
我的web.xml看起来像:
<web-app>
..
<error-page>
<error-code>500</error-code>
<location>/servlet-error.html</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/servlet-error.html</location>
</error-page>
</web-app>
WAR文件看起来像:
servlet-error.html
WEB-INF/web.xml
...
当我没有<error-page>
部分然后我得到的标准误差码头(有回溯),当我拥有它时,我只会在Firefox中看到一个白页,并在Chrome中显示标准的浏览器错误消息。 Jetty日志中没有错误,例如“servlet-error.html找不到”。
我已经尝试更改从/servlet-error.html
到/servlet-error-xxx.html
的web.xml并没有任何更改(=白页,Jetty日志中没有错误)。所以我怀疑它无法通过HTML文件找到。
附加信息:应用程序使用Wicket编写,应用程序位于Wicket“部署模式”中,导致错误的异常正在应用程序的构造函数中抛出(这似乎绕过了Wicket的错误处理和隐藏部署模式中的异常回溯?)。检票申请包括在<servlet>
而不是<filter>
。
P.S.这个Jetty位于Apache后面,所以这甚至是正确的方式来处理这个,或者我应该添加一些东西到Apache配置中,即“如果Jetty返回!= 200,那么忽略Jetty返回的内容并显示此错误页面...... “
编辑:我已经纠正了原来的原因错误(即应用程序现在工作没有错误),现在我可以浏览到http://mydomain.com/context-root/servlet-error.html,而在此之前,如果我浏览到静态HTML我会得到500错误页。我看到,我在我的web.xml:
<servlet-mapping>
<servlet-name>my-app</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我怀疑,当码头尝试执行正常请求,看到了错误,那么它试图获取servlet-error.html
页面,它也可以通过使用取web.xml
再次陷入试图去应用程序,这又会产生错误..大概是为了阻止无限循环,它只是显示一个空白页面的浏览器,虽然在日志中的东西会很好!
但我还是不知道正确的方式来解决这个问题是....
添加以下,但它并没有帮助。
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
嗨,是的,这是关于由Wicket应用程序构造函数,由Jetty处理的错误。我不知道如何让Jetty在浏览器中显示自定义错误页面(例如静态HTML),而不是在浏览器中显示堆栈回溯(可能包含太多的信息,例如SQL语句或其他内容)。 – 2011-03-24 13:27:01
更改我的答案包含更多信息。 – Daan 2011-03-24 15:28:47
感谢您的信息。我已经试过(见问题),你知道它为什么不起作用吗? – 2011-03-25 17:50:57