All pastes #395072 Raw Edit

Untitled

public text v1 · immutable
·published 2007-03-14 19:45 UTC
rendered paste body
Index: LockhartContentSource.java
===================================================================
RCS file: /cvs/glassfish/admin-gui/src/java/com/sun/enterprise/tools/admingui/servlet/LockhartContentSource.java,v
retrieving revision 1.1
diff -c -r1.1 LockhartContentSource.java
*** LockhartContentSource.java	19 Jan 2007 03:27:15 -0000	1.1
--- LockhartContentSource.java	14 Mar 2007 19:44:06 -0000
***************
*** 24,35 ****
--- 24,37 ----
  
  import java.io.File;
  import java.io.FileInputStream;
+ import java.io.FileNotFoundException;
  import java.io.InputStream;
  import java.util.Date;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletResponse;
+ import javax.servlet.ServletContext;
  
  //import java.io.*;
  import java.util.StringTokenizer;
***************
*** 37,45 ****
  //import javax.servlet.*;
  //import javax.servlet.http.*;
  
- import org.apache.jasper.compiler.JspUtil;
- 
- 
  /**
   *
   */
--- 39,44 ----
***************
*** 67,114 ****
      public InputStream getInputStream(DownloadServlet.Context ctx) {
  	HttpServletRequest request =
  	    (HttpServletRequest) ctx.getServletRequest();
- 	if (isJSP(request)) {
- 	    serveJSPPage(ctx);
- 	    //This attribute is used to decide whether to send error code, or not.
- 	    ctx.setAttribute("JSP_PAGE_SERVED", "true");
- 
- 	    return null;
- 	}
  
  	String pathInfo = request.getPathInfo();
  	if (pathInfo == null || pathInfo.length() == 0) {
  	    return null;
  	}
  
  	String servletPath = request.getServletPath();
  	int index = pathInfo.lastIndexOf('.');
  	// Set the extension so it can be mapped to a MIME type
  	String extnsn = pathInfo.substring(index + 1);
  	ctx.setAttribute(DownloadServlet.EXTENSION, extnsn);	// NOI18N
- 	InputStream is = getClass().getClassLoader().getResourceAsStream(servletPath.substring(1)+pathInfo);
  
  	ctx.setAttribute("filePath", is);
- 	ctx.setAttribute("JSP_PAGE_SERVED", "false");
  
  	// Return an InputStream to the tmpFile
  	return is;
      }
  
      /**
-      *	<p> This method looks at the request information and determines if it
-      *	    thinks it is a jsp.  Essentially it thinks anything that ends with
-      *	    "jsp" in is a jsp (this is not fool proof).</p>
-      */
-     public boolean isJSP(HttpServletRequest request) {
- 	String uri = request.getRequestURI();
- 	String pathInfo = request.getPathInfo();
- 	if ((uri.indexOf("jsp") > -1) && pathInfo.endsWith(".jsp")) {
- 	    return true;
- 	}
- 	return false;
-     }
- 
-     /**
       *	<p> This method may be used to clean up any temporary resources.  It
       *	    will be invoked after the <code>InputStream</code> has been
       *	    completely read.</p>
--- 66,100 ----
      public InputStream getInputStream(DownloadServlet.Context ctx) {
  	HttpServletRequest request =
  	    (HttpServletRequest) ctx.getServletRequest();
  
  	String pathInfo = request.getPathInfo();
  	if (pathInfo == null || pathInfo.length() == 0) {
  	    return null;
  	}
+ 	ServletContext sc = ctx.getServletConfig().getServletContext();
  
  	String servletPath = request.getServletPath();
+ 	String realPath = sc.getRealPath(servletPath);
+ 	File file = new File(realPath+pathInfo);
+ 	InputStream is = null;
+ 	try {
+ 		is = new FileInputStream(file);
+ 	} catch (FileNotFoundException ex) {
+ 		//try classpath
+ 		is = getClass().getClassLoader().getResourceAsStream(servletPath.substring(1)+pathInfo);
+ 	}
  	int index = pathInfo.lastIndexOf('.');
  	// Set the extension so it can be mapped to a MIME type
  	String extnsn = pathInfo.substring(index + 1);
  	ctx.setAttribute(DownloadServlet.EXTENSION, extnsn);	// NOI18N
  
  	ctx.setAttribute("filePath", is);
  
  	// Return an InputStream to the tmpFile
  	return is;
      }
  
      /**
       *	<p> This method may be used to clean up any temporary resources.  It
       *	    will be invoked after the <code>InputStream</code> has been
       *	    completely read.</p>
***************
*** 134,231 ****
       *	    used for caching.</p>
       */
      public long getLastModified(DownloadServlet.Context context) {
- 	if (isJSP((HttpServletRequest) context.getServletRequest())) {
- 	    // Don't cache JSP's
- 	    return -1;
- 	}
- 
  	// This will enable caching on all files served through this code path
  	return DEFAULT_MODIFIED_DATE;
      }
  
-     private void serveJSPPage(DownloadServlet.Context ctx) {
- 	HttpServletRequest request = (HttpServletRequest)ctx.getServletRequest();
- 	HttpServletResponse response = (HttpServletResponse)ctx.getServletResponse();
- 	String pathInfo = (String)request.getAttribute(PATH_INFO_ATTRIBUTE);
- 	String servletPath = (String)request.getAttribute(SERVLET_PATH_ATTRIBUTE);
- 
- 	if(servletPath == null) {
- 	    servletPath = request.getServletPath();
- 	    pathInfo = request.getPathInfo();
- 	}
- 	String className = getClassName(servletPath, pathInfo);
- 
- 	try {
- 	    Class cls = Class.forName(className);
- 	    Object obj = cls.newInstance();
- 	    ((HttpServlet)obj).init(ctx.getServletConfig());
- 	    ((HttpServlet)obj).service(request, response);
- 	} catch(Exception ex) {
- 		//throw an exception here
- 	}
-     }
- 
-     /**
-      *	This method takes the servlet path and the pathInfo (which should be
-      *	the jspName) and generates the class name of the generated JSP.  Both
-      *	of these Strings are expected to have a leading '/'.
-      */
-     protected String getClassName(String servletPath, String jspName) {
- 	return getClassName(servletPath+jspName);
-     }
- 
- 
-     /**
-      *	This method takes the full jsp name and generates the class name for
-      *	the generated JSP.
-      */
-     protected String getClassName(String fullPath) {
- 	fullPath = fullPath.trim();
- 	int lastSlash = fullPath.lastIndexOf('/');
- 	if (lastSlash == -1) {
- 	    // Probably an error, but just in case we'll do this and let it
- 	    // fail later.
- 	    return JSP_CLASS_PREFIX+JspUtil.makeJavaIdentifier(fullPath);
- 	}
- 
- 	// The packageName is the full path minus everything after last '/'
- 	String packageName = fullPath.substring(0, ++lastSlash);
- 
- 	// The jspName is everything after the last '/'
- 	String jspName = fullPath.substring(lastSlash);
- 
- 	// Make sure to get rid of any double slashes  "//"
- 	//This may never happen to our application.
- 	for (int loc=packageName.indexOf("//"); loc != -1;
- 		loc=packageName.indexOf("//")) {
- 	    packageName = packageName.replaceAll("//", "/");
- 	}
- 
- 	// Get rid of leading '/'
- 	if (packageName.startsWith("/")) {
- 	    packageName = packageName.substring(1);
- 	}
- 
- 	// Iterate through each part of path and call makeJavaIdentifier
- 	StringTokenizer tok = new StringTokenizer(packageName, "/");
- 	StringBuffer className = new StringBuffer(JSP_CLASS_PREFIX);
- 	while (tok.hasMoreTokens()) {
- 	    // Convert .'s to _'s + other conversions
- 	    className.append(JspUtil.makeJavaIdentifier(tok.nextToken()));
- 	    className.append('.');
- 	}
- 
- 	// Add on the jsp name
- 	className.append(JspUtil.makeJavaIdentifier(jspName));
- /* Commenting out for now, log later
- 	if (Util.isLoggableFINER()) {
- 	    Util.logFINER("CLASSNAME = "+className);
- 	}
- */
- 	// Return the classname
- 	return className.toString();
-     }
- 
      /**
       *	When an include() is called the PATH_INFO is set via a Request
       *	attribute named "javax.servlet.include.path_info".  This constant is
--- 120,129 ----
***************
*** 241,251 ****
       */
      private static final String SERVLET_PATH_ATTRIBUTE =
  	"javax.servlet.include.servlet_path";
- 
-     /**
-      *	The base package where compiled JSP class files are located.
-      */
-     private static final String JSP_CLASS_PREFIX =	"org.apache.jsp.";
  
      /**
       *	This is the default "Last-Modified" Date.  Its value is the
--- 139,144 ----