--- /dev/null
+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());
+ 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);
+ }
+ }
+ }
+}