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