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 com.atlassian.plugin.servlet.util.ServletContextServletModuleManagerAccessor;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16
17
18
19
20
21 public class ServletModuleContainerServlet extends HttpServlet
22 {
23 private static final Logger log = LoggerFactory.getLogger(ServletModuleContainerServlet.class);
24 private ServletConfig servletConfig;
25
26 public void init(ServletConfig servletConfig) throws ServletException
27 {
28 super.init(servletConfig);
29 this.servletConfig = servletConfig;
30 }
31
32 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
33 {
34 if (getServletModuleManager() == null)
35 {
36 log.error("Could not get ServletModuleManager?");
37 response.sendError(500, "Could not get ServletModuleManager.");
38 return;
39 }
40
41 HttpServlet servlet = getServletModuleManager().getServlet(getPathInfo(request), servletConfig);
42
43 if (servlet == null)
44 {
45 log.debug("No servlet found for: " + getRequestURI(request));
46 response.sendError(404, "Could not find servlet for: " + getRequestURI(request));
47 return;
48 }
49
50 try
51 {
52 servlet.service(request, response);
53 }
54 catch (UnavailableException e)
55 {
56 log.error(e.getMessage(), e);
57 response.sendError(500, e.getMessage());
58 }
59 catch (ServletException e)
60 {
61 log.error(e.getMessage(), e);
62 response.sendError(500, e.getMessage());
63 }
64 }
65
66
67
68
69
70 protected ServletModuleManager getServletModuleManager()
71 {
72 return ServletContextServletModuleManagerAccessor.getServletModuleManager(getServletContext());
73 }
74
75 private String getPathInfo(HttpServletRequest request)
76 {
77 String pathInfo = (String) request.getAttribute(RequestAttributes.PATH_INFO);
78 if (pathInfo == null)
79 {
80 pathInfo = request.getPathInfo();
81 }
82 return pathInfo;
83 }
84
85 private String getRequestURI(HttpServletRequest request)
86 {
87 String requestURI = (String) request.getAttribute(RequestAttributes.REQUEST_URI);
88 if (requestURI == null)
89 {
90 requestURI = request.getRequestURI();
91 }
92 return requestURI;
93 }
94
95 private static class RequestAttributes
96 {
97 static final String PATH_INFO = "javax.servlet.include.path_info";
98 static final String REQUEST_URI = "javax.servlet.include.request_uri";
99 }
100 }