View Javadoc

1   package com.atlassian.plugin.servlet;
2   
3   import java.io.IOException;
4   
5   import javax.servlet.ServletConfig;
6   import javax.servlet.ServletException;
7   import javax.servlet.UnavailableException;
8   import javax.servlet.http.HttpServlet;
9   import javax.servlet.http.HttpServletRequest;
10  import javax.servlet.http.HttpServletResponse;
11  
12  import org.apache.commons.logging.Log;
13  import org.apache.commons.logging.LogFactory;
14  
15  /**
16   * Applications need to create a concrete subclass of this for use in their webapp.  This servlets responsiblity
17   * is to retrieve the servlet to be used to serve the request from the {@link ServletModuleManager}.  If no servlet
18   * can be found to serve the request, a 404 should be sent back to the client.
19   */
20  public abstract class ServletModuleContainerServlet extends HttpServlet
21  {
22      private static final Log log = LogFactory.getLog(ServletModuleContainerServlet.class);
23      private ServletConfig servletConfig;
24  
25      public void init(ServletConfig servletConfig) throws ServletException
26      {
27          super.init(servletConfig);
28          this.servletConfig = servletConfig;
29      }
30  
31      protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
32      {
33          if (getServletModuleManager() == null)
34          {
35              log.error("Could not get ServletModuleManager?");
36              response.sendError(500, "Could not get ServletModuleManager.");
37              return;
38          }
39  
40          HttpServlet servlet = getServletModuleManager().getServlet(request.getPathInfo(), servletConfig);
41  
42          if (servlet == null)
43          {
44              log.debug("No servlet found for: " + request.getRequestURI());
45              response.sendError(404, "Could not find servlet for: " + request.getRequestURI());
46              return;
47          }
48  
49          try
50          {
51              servlet.service(request, response);
52          }
53          catch (UnavailableException e) // prevent this servlet from unloading itself (PLUG-79)
54          {
55              log.error(e);
56              response.sendError(500, e.getMessage());
57          }
58          catch (ServletException e)
59          {
60              log.error(e);
61              response.sendError(500, e.getMessage());
62          }
63      }
64  
65      /**
66       * Retrieve the ServletModuleManager from your container framework.
67       */
68      protected abstract ServletModuleManager getServletModuleManager();
69  }