1 package com.atlassian.plugin.servlet;
2
3 import com.atlassian.plugin.servlet.util.ServletContextServletModuleManagerAccessor;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6
7 import javax.servlet.RequestDispatcher;
8 import javax.servlet.ServletConfig;
9 import javax.servlet.ServletException;
10 import javax.servlet.UnavailableException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 import java.io.IOException;
15
16
17
18
19
20
21 public class ServletModuleContainerServlet extends HttpServlet {
22 private static final Logger log = LoggerFactory.getLogger(ServletModuleContainerServlet.class);
23 private ServletConfig servletConfig;
24
25 public void init(ServletConfig servletConfig) throws ServletException {
26 super.init(servletConfig);
27 this.servletConfig = servletConfig;
28 }
29
30 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
31 if (getServletModuleManager() == null) {
32 log.error("Could not get ServletModuleManager?");
33 response.sendError(500, "Could not get ServletModuleManager.");
34 return;
35 }
36
37 HttpServlet servlet = getServletModuleManager().getServlet(getPathInfo(request), servletConfig);
38
39 if (servlet == null) {
40 log.debug("No servlet found for: " + getRequestURI(request));
41 response.sendError(404, "Could not find servlet for: " + getRequestURI(request));
42 return;
43 }
44
45 try {
46 servlet.service(request, response);
47 } catch (ServletException e) {
48 log.error(e.getMessage(), e);
49 response.sendError(500, e.getMessage());
50 }
51 }
52
53
54
55
56
57 protected ServletModuleManager getServletModuleManager() {
58 return ServletContextServletModuleManagerAccessor.getServletModuleManager(getServletContext());
59 }
60
61 private String getPathInfo(HttpServletRequest request) {
62 String pathInfo = (String) request.getAttribute(RequestDispatcher.INCLUDE_PATH_INFO);
63 if (pathInfo == null) {
64 pathInfo = request.getPathInfo();
65 }
66 return pathInfo;
67 }
68
69 private String getRequestURI(HttpServletRequest request) {
70 String requestURI = (String) request.getAttribute(RequestDispatcher.INCLUDE_REQUEST_URI);
71 if (requestURI == null) {
72 requestURI = request.getRequestURI();
73 }
74 return requestURI;
75 }
76 }