001: package org.apache.turbine.services.servlet;
002:
003: /*
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: import java.io.InputStream;
023: import java.net.MalformedURLException;
024: import java.net.URL;
025: import javax.servlet.ServletConfig;
026: import javax.servlet.ServletContext;
027:
028: import org.apache.commons.logging.Log;
029: import org.apache.commons.logging.LogFactory;
030: import org.apache.turbine.Turbine;
031: import org.apache.turbine.services.TurbineBaseService;
032: import org.apache.turbine.util.ServletUtils;
033:
034: /**
035: * <p>This class provides a context service when the application
036: * is run in a ServletContainer. It is mainly a wrapper around
037: * the ServletContext API.</p>
038: * <p>This class requires Servlet API 2.1 or better.</p>
039: *
040: * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
041: * @author <a href="mailto:raphael@apache.org">Raphaƫl Luta</a>
042: * @author <a href="mailto:ekkerbj@netscape.net">Jeff Brekke</a>
043: * @author <a href="mailto:sgala@hisitech.com">Santiago Gala</a>
044: * @author <a href="mailto:jvanzyl@periapt.com.com">Jason van Zyl</a>
045: * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
046: * @version $Id: TurbineServletService.java 534527 2007-05-02 16:10:59Z tv $
047: */
048: public class TurbineServletService extends TurbineBaseService implements
049: ServletService {
050: /** Logging */
051: private static Log log = LogFactory
052: .getLog(TurbineServletService.class);
053:
054: /** The servlet context for this servlet */
055: private ServletContext servletContext = null;
056:
057: /** The servlet configuration for this servlet */
058: private ServletConfig servletConfig = null;
059:
060: /**
061: * Load all configured components and initialize them. This is
062: * a zero parameter variant which queries the Turbine Servlet
063: * for its config.
064: */
065: public void init() {
066: this .servletConfig = Turbine.getTurbineServletConfig();
067: try {
068: this .servletContext = servletConfig.getServletContext();
069:
070: log.debug("Initializing with ServletConfig");
071: } catch (Exception e) {
072: log.error("Cannot initialize TurbineServletService.", e);
073: }
074: setInit(true);
075: }
076:
077: /**
078: * Called during Turbine.init()
079: *
080: * @param servletConfig A ServletConfig.
081: *
082: * @deprecated use init() instead.
083: */
084: public void init(ServletConfig servletConfig) {
085: init();
086: }
087:
088: /**
089: * Returns an URL object for a given URI string.
090: * This URI is considered relative to the context.
091: *
092: * @see javax.servlet.ServletContext#getResource
093: * @param uri the URI to resolve as an URL
094: * @return an URL object or null is the uri is malformed or
095: * can't be resolved
096: */
097: public URL getResource(String uri) {
098: if (servletContext == null) {
099: return null;
100: }
101:
102: URL url = null;
103:
104: try {
105: url = getServletContext().getResource(uri);
106: // work-around for Websphere 3.52
107: if (url != null
108: && url.toString().startsWith("classloader:")) {
109: url = new URL("file:" + url.toString().substring(12));
110: } else if (url == null) {
111: url = new URL("file:"
112: + getServletContext().getRealPath(uri));
113: }
114: } catch (MalformedURLException e) {
115: //if the URL is wrong, return null
116: }
117:
118: return url;
119: }
120:
121: /**
122: * Same as getResource except that it returns an InputStream
123: *
124: * @see javax.servlet.ServletContext#getResourceAsStream
125: * @param uri the URI to resolve
126: * @return an InputStream on the URI content or null
127: */
128: public InputStream getResourceAsStream(String uri) {
129: if (servletContext == null) {
130: return null;
131: }
132:
133: InputStream is = null;
134: is = servletContext.getResourceAsStream(uri);
135: return is;
136: }
137:
138: /**
139: * Returns the complete filesystem path for a
140: * given URI
141: *
142: * @see javax.servlet.ServletContext#getRealPath
143: * @param uri the URI to resolve
144: * @return the full system path of this URI
145: */
146: public String getRealPath(String uri) {
147: if (getServletContext() == null || uri == null) {
148: return null;
149: } else {
150: return getServletContext().getRealPath(uri);
151: }
152: }
153:
154: /**
155: * Returns the servlet config used by this
156: * Turbine web application.
157: *
158: * @return turbine servlet config
159: */
160: public ServletConfig getServletConfig() {
161: return servletConfig;
162: }
163:
164: /**
165: * Returns the servlet context used by this
166: * Turbine web application.
167: *
168: * @return turbine servlet context
169: */
170: public ServletContext getServletContext() {
171: return servletContext;
172: }
173:
174: /**
175: * Returns the server scheme for this
176: * Turbine application. This will either
177: * be http or https.
178: *
179: * @return String
180: */
181: public String getServerScheme() {
182: return Turbine.getServerScheme();
183: }
184:
185: /**
186: * Returns the server name that this
187: * Turbine application is running
188: * on.
189: *
190: * @return String
191: */
192: public String getServerName() {
193: return Turbine.getServerName();
194: }
195:
196: /**
197: * Returns the port that this Turbine
198: * application is running through
199: * on the server.
200: *
201: * @return String
202: */
203: public String getServerPort() {
204: return Turbine.getServerPort();
205: }
206:
207: /**
208: * Returns the context path for this
209: * Turbine application.
210: *
211: * @return String
212: */
213: public String getContextPath() {
214: return Turbine.getContextPath();
215: }
216:
217: /**
218: * Expands a string that points to a relative path or path list,
219: * leaving it as an absolute path based on the servlet context.
220: * It will return null if the text is empty or the config object
221: * is null.
222: *
223: * @param path The String containing a path or path list.
224: * @return A String with the expanded path or path list.
225: */
226: public String expandRelative(String path) {
227: return ServletUtils.expandRelative(getServletConfig(), path);
228: }
229: }
|