1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.servlet;
20
21 import java.io.IOException;
22
23 import javax.servlet.GenericServlet;
24 import javax.servlet.ServletException;
25 import javax.servlet.ServletRequest;
26 import javax.servlet.ServletResponse;
27 import javax.servlet.http.HttpServletRequest;
28
29 import org.eclipse.jetty.server.Dispatcher;
30 import org.eclipse.jetty.server.HttpConnection;
31 import org.eclipse.jetty.server.Request;
32 import org.eclipse.jetty.server.handler.ContextHandler;
33 import org.eclipse.jetty.util.URIUtil;
34 import org.eclipse.jetty.util.resource.Resource;
35
36
37
38
39
40
41
42
43
44
45 public class JspPropertyGroupServlet extends GenericServlet
46 {
47 private static final long serialVersionUID = 3681783214726776945L;
48
49 public final static String NAME = "__org.eclipse.jetty.servlet.JspPropertyGroupServlet__";
50 private final ServletHandler _servletHandler;
51 private final ContextHandler _contextHandler;
52 private ServletHolder _dftServlet;
53 private ServletHolder _jspServlet;
54 private boolean _starJspMapped;
55
56 public JspPropertyGroupServlet(ContextHandler context, ServletHandler servletHandler)
57 {
58 _contextHandler=context;
59 _servletHandler=servletHandler;
60 }
61
62 @Override
63 public void init() throws ServletException
64 {
65 String jsp_name = "jsp";
66 ServletMapping servlet_mapping =_servletHandler.getServletMapping("*.jsp");
67 if (servlet_mapping!=null)
68 {
69 _starJspMapped=true;
70
71
72 ServletMapping[] mappings = _servletHandler.getServletMappings();
73 for (ServletMapping m:mappings)
74 {
75 String[] paths = m.getPathSpecs();
76 if (paths!=null)
77 {
78 for (String path:paths)
79 {
80 if ("*.jsp".equals(path) && !NAME.equals(m.getServletName()))
81 servlet_mapping = m;
82 }
83 }
84 }
85
86 jsp_name=servlet_mapping.getServletName();
87 }
88 _jspServlet=_servletHandler.getServlet(jsp_name);
89
90 String dft_name="default";
91 ServletMapping default_mapping=_servletHandler.getServletMapping("/");
92 if (default_mapping!=null)
93 dft_name=default_mapping.getServletName();
94 _dftServlet=_servletHandler.getServlet(dft_name);
95 }
96
97 @Override
98 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
99 {
100 HttpServletRequest request = null;
101 if (req instanceof HttpServletRequest)
102 request = (HttpServletRequest)req;
103 else
104 throw new ServletException("Request not HttpServletRequest");
105
106 String servletPath=null;
107 String pathInfo=null;
108 if (request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI)!=null)
109 {
110 servletPath=(String)request.getAttribute(Dispatcher.INCLUDE_SERVLET_PATH);
111 pathInfo=(String)request.getAttribute(Dispatcher.INCLUDE_PATH_INFO);
112 if (servletPath==null)
113 {
114 servletPath=request.getServletPath();
115 pathInfo=request.getPathInfo();
116 }
117 }
118 else
119 {
120 servletPath = request.getServletPath();
121 pathInfo = request.getPathInfo();
122 }
123
124 String pathInContext=URIUtil.addPaths(servletPath,pathInfo);
125
126 if (pathInContext.endsWith("/"))
127 {
128 _dftServlet.getServlet().service(req,res);
129 }
130 else if (_starJspMapped && pathInContext.toLowerCase().endsWith(".jsp"))
131 {
132 _jspServlet.getServlet().service(req,res);
133 }
134 else
135 {
136
137 Resource resource = _contextHandler.getResource(pathInContext);
138 if (resource!=null && resource.isDirectory())
139 _dftServlet.getServlet().service(req,res);
140 else
141 _jspServlet.getServlet().service(req,res);
142 }
143
144 }
145
146 }