在将错误处理程序设置为jetty时遇到了一些问题:
我创建了自己的错误处理程序:
public class ServerErrorPageErrorHandler extends ErrorPageErrorHandler {
@Override
protected void writeErrorPageBody(HttpServletRequest request, Writer writer, int code, String message, boolean showStacks)
throws IOException
{
String uri= request.getRequestURI();
writeErrorPageMessage(request,writer,code,message,uri);
if (showStacks)
writeErrorPageStacks(request,writer);
writer.write("<hr><i><small>Powered by OWN-SERVER://</small></i><hr/>\n");
}
}
并将其设置在文件'jett-web.xml'中,该文件位于'/ webapp / WEB-INF /'
文件夹中<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/</Set>
<Set name="errorHandler">
<New class="com.mobile.service.handlers.ServerErrorPageErrorHandler"/>
</Set></Configure>
当jetty启动时,它没有为类WebAppContext设置setErrorHandler的方法,(我在其父类ErrorHandler中找到了setErrorHandler方法,所以我认为它确实意味着)
然后创建一个文件'error-handler-context.xml'并填写文件:
<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
<Set name="contextPath">/</Set>
<Set name="errorHandler">
<New class="com.mobile.service.handlers.ServerErrorPageErrorHandler"/>
</Set>
</Configure>
然后jetty成功启动,但错误处理程序没有效果。
我只是想将错误页面中显示的消息“由码头供电”更改为“由自己的服务器供电”。
我不想创建新的错误页面。
那么如何实现呢?
我改变了配置文件:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/</Set>
<Call name="setErrorHandler">
<Arg>
<New class="com.hp.mobile.service.handlers.ServerErrorPageErrorHandler"/>
</Arg>
</Call>
</Configure>
在码头启动后,仍然会说NoSuchMethod'setErrorHanlder'异常,
我调试它,得到例外:
“java.lang.illegalargumentexception:argument type mismatch”
在“TypeUtil.java”中的method.invoke(obj,arg)
setErrorHandler的参数是ErrorHandler类,
就我而言,它是从ErrorHandler扩展而来的,
那为什么会发生?
BTW:我还将类ServerErrorPageErrorHandler更改为从ErrorHandler扩展,它也不起作用。