From: Robert K. <ro...@ko...> - 2007-09-26 14:52:38
|
Hi, I am using the Jetty 6 latest binary distro. I am also using the default jetty.xml. Is there a way to provide a custom ErrorHandler on a per webapp basis? I want to return a server error as "application/x-javascript; charset=utf-8" -- basically a UTF-8 JSON string as I am requesting a UTF-8 JSON (from a jquery $.ajax() call). I don't want the response returned as ISO-8859-1 for a particular webapp (really, I never want ISO-8859-1). ------- First, I have created a 'JettyErrorHandler extends AbstractHandler' in a jar which is placed in $JETTY_HOME/lib and added the following to the jetty.xml "handler" Set: <Item> <New id="ErrorHandler " class="my.package.handler.JettyErrorHandler "/> </Item> This seems to work. But I really don't want that. I have created a $JETTY_HOME/contexts/mywebapp.xml and am using the default jetty.xml ContextDeployer, but I can't seem to add the handler to the HandlerCollection. Is there some way to do that? Is that the right approach? Also, here is the 'handle' method in my custom ErrorHandler. Is this the correct approach? Is there a better way? public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException { HttpConnection connection = HttpConnection.getCurrentConnection(); int status = connection.getResponse().getStatus(); if (status == 500) { //if (!(status == 200 || status == 201 || status == 302 || // status == 301 || status == 302)) { HttpConnection.getCurrentConnection().getRequest().setHandled(true); response.setContentType(APPLICATION_X_JAVASCRIPT_UTF_8); // ByteArrayOutputStream writer= new ByteArrayOutputStream(4096); ServletOutputStream out = response.getOutputStream(); handleErrorPage(request, out, connection.getResponse().getStatus(), connection.getResponse().getReason()); out.flush(); out.close(); } } thanks, -Rob |