1 package org.apache.turbine.services.servlet;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.io.InputStream;
20 import java.net.MalformedURLException;
21 import java.net.URL;
22 import javax.servlet.ServletConfig;
23 import javax.servlet.ServletContext;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.turbine.Turbine;
28 import org.apache.turbine.services.TurbineBaseService;
29 import org.apache.turbine.util.ServletUtils;
30
31 /***
32 * <p>This class provides a context service when the application
33 * is run in a ServletContainer. It is mainly a wrapper around
34 * the ServletContext API.</p>
35 * <p>This class requires Servlet API 2.1 or better.</p>
36 *
37 * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
38 * @author <a href="mailto:raphael@apache.org">Raphaël Luta</a>
39 * @author <a href="mailto:ekkerbj@netscape.net">Jeff Brekke</a>
40 * @author <a href="mailto:sgala@hisitech.com">Santiago Gala</a>
41 * @author <a href="mailto:jvanzyl@periapt.com.com">Jason van Zyl</a>
42 * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
43 * @version $Id: TurbineServletService.java 278958 2005-09-06 09:35:39Z henning $
44 */
45 public class TurbineServletService
46 extends TurbineBaseService implements ServletService
47 {
48 /*** Logging */
49 private static Log log = LogFactory.getLog(TurbineServletService.class);
50
51 /*** The servlet context for this servlet */
52 private ServletContext servletContext = null;
53
54 /*** The servlet configuration for this servlet */
55 private ServletConfig servletConfig = null;
56
57 /***
58 * Load all configured components and initialize them. This is
59 * a zero parameter variant which queries the Turbine Servlet
60 * for its config.
61 */
62 public void init()
63 {
64 this.servletConfig = Turbine.getTurbineServletConfig();
65 try
66 {
67 this.servletContext = servletConfig.getServletContext();
68
69 log.debug("Initializing with ServletConfig");
70 }
71 catch (Exception e)
72 {
73 log.error("Cannot initialize TurbineServletService.", e);
74 }
75 setInit(true);
76 }
77
78 /***
79 * Called during Turbine.init()
80 *
81 * @param servletConfig A ServletConfig.
82 *
83 * @deprecated use init() instead.
84 */
85 public void init(ServletConfig servletConfig)
86 {
87 init();
88 }
89
90 /***
91 * Returns an URL object for a given URI string.
92 * This URI is considered relative to the context.
93 *
94 * @see javax.servlet.ServletContext#getResource
95 * @param uri the URI to resolve as an URL
96 * @return an URL object or null is the uri is malformed or
97 * can't be resolved
98 */
99 public URL getResource(String uri)
100 {
101 if (servletContext == null)
102 {
103 return null;
104 }
105
106 URL url = null;
107
108 try
109 {
110 url = getServletContext().getResource(uri);
111
112 if (url != null && url.toString().startsWith("classloader:"))
113 {
114 url = new URL("file:" + url.toString().substring(12));
115 }
116 else if (url == null)
117 {
118 url = new URL("file:" + getServletContext().getRealPath(uri));
119 }
120 }
121 catch (MalformedURLException e)
122 {
123
124 }
125
126 return url;
127 }
128
129 /***
130 * Same as getResource except that it returns an InputStream
131 *
132 * @see javax.servlet.ServletContext#getResourceAsStream
133 * @param uri the URI to resolve
134 * @return an InputStream on the URI content or null
135 */
136 public InputStream getResourceAsStream(String uri)
137 {
138 if (servletContext == null)
139 {
140 return null;
141 }
142
143 InputStream is = null;
144 is = servletContext.getResourceAsStream(uri);
145 return is;
146 }
147
148 /***
149 * Returns the complete filesystem path for a
150 * given URI
151 *
152 * @see javax.servlet.ServletContext#getRealPath
153 * @param uri the URI to resolve
154 * @return the full system path of this URI
155 */
156 public String getRealPath(String uri)
157 {
158 if (getServletContext() == null || uri == null)
159 {
160 return null;
161 }
162 else
163 {
164 return getServletContext().getRealPath(uri);
165 }
166 }
167
168 /***
169 * Returns the servlet config used by this
170 * Turbine web application.
171 *
172 * @return turbine servlet config
173 */
174 public ServletConfig getServletConfig()
175 {
176 return servletConfig;
177 }
178
179 /***
180 * Returns the servlet context used by this
181 * Turbine web application.
182 *
183 * @return turbine servlet context
184 */
185 public ServletContext getServletContext()
186 {
187 return servletContext;
188 }
189
190 /***
191 * Returns the server scheme for this
192 * Turbine application. This will either
193 * be http or https.
194 *
195 * @return String
196 */
197 public String getServerScheme()
198 {
199 return Turbine.getServerScheme();
200 }
201
202 /***
203 * Returns the server name that this
204 * Turbine application is running
205 * on.
206 *
207 * @return String
208 */
209 public String getServerName()
210 {
211 return Turbine.getServerName();
212 }
213
214 /***
215 * Returns the port that this Turbine
216 * application is running through
217 * on the server.
218 *
219 * @return String
220 */
221 public String getServerPort()
222 {
223 return Turbine.getServerPort();
224 }
225
226 /***
227 * Returns the context path for this
228 * Turbine application.
229 *
230 * @return String
231 */
232 public String getContextPath()
233 {
234 return Turbine.getContextPath();
235 }
236
237 /***
238 * Expands a string that points to a relative path or path list,
239 * leaving it as an absolute path based on the servlet context.
240 * It will return null if the text is empty or the config object
241 * is null.
242 *
243 * @param path The String containing a path or path list.
244 * @return A String with the expanded path or path list.
245 */
246 public String expandRelative(String path)
247 {
248 return ServletUtils.expandRelative(getServletConfig(), path);
249 }
250 }