package jalview.httpserver; import java.io.IOException; import java.util.Collections; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; /** * * @author gmcarstairs * */ public abstract class AbstractRequestHandler extends AbstractHandler { /** * Handle an incoming Http request. */ @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // dumpRequest(request); // debug processRequest(request, response); } catch (Throwable t) { /* * Set server error status on response */ System.err.println("Exception handling request " + request.getRequestURI() + " : " + t.getMessage()); if (response.isCommitted()) { /* * Can't write an HTTP header once any response content has been written */ System.err .println("Unable to return HTTP 500 as response already committed"); } else { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } finally { response.getWriter().flush(); baseRequest.setHandled(true); } } /** * Subclasses should override this method to perform request processing * * @param request * @param response */ protected abstract void processRequest(HttpServletRequest request, HttpServletResponse response); /** * For debug - writes HTTP request details to stdout * * @param request */ protected void dumpRequest(HttpServletRequest request) { System.out.println(request.getMethod()); System.out.println(request.getRequestURL()); for (String hdr : Collections.list(request.getHeaderNames())) { for (String val : Collections.list(request.getHeaders(hdr))) { System.out.println(hdr + ": " + val); } } for (String param : Collections.list(request.getParameterNames())) { for (String val : request.getParameterValues(param)) { System.out.println(param + "=" + val); } } } }