我想在Spring 3.1 Web应用程序中提供自定义404错误页面,但我无法停用Jetty 8的默认404错误页面。
开箱即用的Jetty 8提供了一个默认的404错误页面:
当访问Jetty托管的网站,并提供未由任何servlet处理的URL路径时(例如通过访问http://www.example.com/nonexisting
),Jetty使用自己的默认HTML错误页面进行响应:
HTTP ERROR 404
Problem accessing /nonexisting. Reason:
Not Found
Powered by Jetty://
要替换此默认行为,
DefaultHandler
from my Jetty XML file,web.xml
to include both Servlet 2.5 and Servlet 3.0 error handler locations pointing to /error
,@Controller
for handling the request to /error
,但我的网站仍然会返回 Jetty自己的默认HTML错误页面。
Jetty 8's official documentation talks about setting up a "custom error pages",但那里的建议说
@Controller
中进行,如上所述)/
URI的”根“Web应用程序”。 (我不希望在web.xml
内部执行此操作。我已将Spring MVC的DispatcherServlet
映射到/。如何关闭Jetty的默认错误处理程序并按上述指示完成错误处理?
答案 0 :(得分:6)
我的问题的解决方案是添加自定义org.eclipse.jetty.server.handler.ErrorHandler
。
如果用户未明确指定某些ErrorHandler
,则Jetty服务器实例似乎注册了默认ErrorHandler
。
如http://www.eclipse.org/jetty/documentation/current/custom-error-pages.html所述,要注册自定义ErrorHandler
,您可以按照以下步骤操作。
org.eclipse.jetty.server.handler.ErrorHandler
子类,例如com.example.CustomErrorHandler
。CustomErrorHandler
捆绑在jar
文件中,然后将该jar
文件复制到${jetty.base}/lib/ext
目录中。ErrorHandler
注册为bean:档案jetty.xml
:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- more configuration -->
<Call name="addBean">
<Arg>
<New class="com.example.CustomErrorHandler">
<Set name="server"><Ref refid="Server" /></Set>
</New>
</Arg>
</Call>
</Configure>
答案 1 :(得分:1)
以下是定义自定义错误页面的方法 -