停用Jetty的默认404错误处理程序
问题内容:
我想在Spring 3.1 Web应用程序中提供一个自定义的404错误页面,但是我无法停用Jetty 8的默认404错误页面。
开箱即用的Jetty8提供了默认的404错误页面:访问Jetty托管的网站时,并提供了任何servlet都无法处理的URL路径(例如,通过访问http://www.example.com/nonexisting
),Jetty会使用_其自己的默认HTML错误页面进行_ 响应:
HTTP ERROR 404
Problem accessing /nonexisting. Reason:
Not Found
Powered by Jetty://
但是我的网站仍然返回 Jetty自己的默认HTML错误页面 。
Jetty8的官方文档讨论了如何设置“自定义错误页面”,但是那里的建议说
- 配置一个自定义的Jetty错误处理程序(我不想这样做,我想
@Controller
如上所述在我自己的Spring内执行) - 创建“捕获所有上下文并创建映射到
/
URI 的“根”网络应用”。(我不想这样做,因为我web.xml
已经将Spring MVC映射DispatcherServlet
到/。
如何关闭Jetty的默认错误处理程序,并按照上面的说明进行错误处理?
问题答案:
解决我的问题的方法是添加一个自定义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
。 - 使此子类可用于您的Eclipse服务器实例,例如,将其绑定
CustomErrorHandler
到一个jar
文件中,然后将该jar
文件复制到${jetty.base}/lib/ext
目录中。 - 配置您的Jetty服务器实例以将此自定义
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>