JAL-1725 fix for redirect of POST to GET, debug output removed
[jalview.git] / src / jalview / httpserver / AbstractRequestHandler.java
1 package jalview.httpserver;
2
3 import java.io.IOException;
4 import java.util.Collections;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import org.eclipse.jetty.server.Request;
11 import org.eclipse.jetty.server.handler.AbstractHandler;
12
13 /**
14  * 
15  * @author gmcarstairs
16  *
17  */
18 public abstract class AbstractRequestHandler extends AbstractHandler
19 {
20   /**
21    * Handle an incoming Http request.
22    */
23   @Override
24   public void handle(String target, Request baseRequest,
25           HttpServletRequest request, HttpServletResponse response)
26           throws IOException, ServletException
27   {
28     try
29     {
30       // dumpRequest(request); // debug
31       processRequest(request, response);
32     } catch (Throwable t)
33     {
34       /*
35        * Set server error status on response
36        */
37       System.err.println("Exception handling request "
38               + request.getRequestURI() + " : " + t.getMessage());
39       if (response.isCommitted())
40       {
41         /*
42          * Can't write an HTTP header once any response content has been written
43          */
44         System.err
45                 .println("Unable to return HTTP 500 as response already committed");
46       }
47       else
48       {
49         response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
50       }
51     } finally
52     {
53       response.getWriter().flush();
54       baseRequest.setHandled(true);
55     }
56   }
57
58   /**
59    * Subclasses should override this method to perform request processing
60    * 
61    * @param request
62    * @param response
63    */
64   protected abstract void processRequest(HttpServletRequest request,
65           HttpServletResponse response);
66
67   /**
68    * For debug - writes HTTP request details to stdout
69    * 
70    * @param request
71    */
72   protected void dumpRequest(HttpServletRequest request)
73   {
74     System.out.println(request.getMethod());
75     System.out.println(request.getRequestURL());
76     for (String hdr : Collections.list(request.getHeaderNames()))
77     {
78       for (String val : Collections.list(request.getHeaders(hdr)))
79       {
80         System.out.println(hdr + ": " + val);
81       }
82     }
83     for (String param : Collections.list(request.getParameterNames()))
84     {
85       for (String val : request.getParameterValues(param))
86       {
87         System.out.println(param + "=" + val);
88       }
89     }
90   }
91 }