From 19c291bac01993390d96d52faaa2fe6c8b173fe7 Mon Sep 17 00:00:00 2001 From: Jani Laakso Date: Wed, 31 Oct 2007 17:52:12 +0000 Subject: [PATCH] ClassLoader is now used to find /ITMILL resources in case getResourceAsStream fails. Fileupload imports fixed. svn changeset:2644/svn branch:trunk --- .../gwt/server/ApplicationServlet.java | 35 ++++++++++++++----- .../gwt/server/CommunicationManager.java | 11 +++--- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/server/ApplicationServlet.java b/src/com/itmill/toolkit/terminal/gwt/server/ApplicationServlet.java index e90494af36..e6c8cd1400 100644 --- a/src/com/itmill/toolkit/terminal/gwt/server/ApplicationServlet.java +++ b/src/com/itmill/toolkit/terminal/gwt/server/ApplicationServlet.java @@ -29,6 +29,7 @@ package com.itmill.toolkit.terminal.gwt.server; import java.io.BufferedWriter; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -44,7 +45,6 @@ import java.util.Map; import java.util.Properties; import java.util.WeakHashMap; -import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -52,11 +52,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.xml.sax.SAXException; -import com.google.gwt.http.client.Request; import com.itmill.toolkit.Application; +import com.itmill.toolkit.external.org.apache.commons.fileupload.servlet.ServletFileUpload; import com.itmill.toolkit.service.FileTypeResolver; import com.itmill.toolkit.terminal.DownloadStream; import com.itmill.toolkit.terminal.ParameterHandler; @@ -145,6 +144,8 @@ public class ApplicationServlet extends HttpServlet { private String debugMode = ""; + private ClassLoader classLoader; + /** * Called by the servlet container to indicate to a servlet that the servlet * is being placed into service. @@ -216,6 +217,7 @@ public class ApplicationServlet extends HttpServlet { throw new ServletException(e); } } + this.classLoader = classLoader; // Loads the application class using the same class loader // as the servlet itself @@ -418,8 +420,24 @@ public class ApplicationServlet extends HttpServlet { ServletContext sc = getServletContext(); InputStream is = sc.getResourceAsStream(filename); if (is == null) { - response.setStatus(404); - return; + // try if requested file is found from classloader + try { + // ClassLoader cld = Thread.currentThread() + // .getContextClassLoader(); + // if (cld == null) + // throw new ClassNotFoundException( + // "Could not create ClassLoader."); + // is = cld.getResourceAsStream(filename); + is = this.classLoader.getResourceAsStream(filename); + } catch (Exception e) { + System.err + .println("Requested resource [" + + filename + + "] not found from filesystem or through class loader."); + // cannot serve requested file + response.setStatus(404); + return; + } } String mimetype = sc.getMimeType(filename); if (mimetype != null) @@ -457,9 +475,10 @@ public class ApplicationServlet extends HttpServlet { response.getOutputStream())); String relative = ""; - - String pathInfo = request.getPathInfo() == null ? "/" : request.getPathInfo(); - String t = pathInfo.substring(1); + + String pathInfo = request.getPathInfo() == null ? "/" : request + .getPathInfo(); + String t = pathInfo.substring(1); while (t.indexOf('/') >= 0) { t = t.substring(t.indexOf('/') + 1); relative += "../"; diff --git a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java index ccbb716ae9..38a46258e4 100644 --- a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java +++ b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java @@ -59,11 +59,12 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.ProgressListener; -import org.apache.commons.fileupload.servlet.ServletFileUpload; +// wrapped to prevent conflicts with possible developer required Apache JARs +import com.itmill.toolkit.external.org.apache.commons.fileupload.FileItemIterator; +import com.itmill.toolkit.external.org.apache.commons.fileupload.FileItemStream; +import com.itmill.toolkit.external.org.apache.commons.fileupload.FileUploadException; +import com.itmill.toolkit.external.org.apache.commons.fileupload.ProgressListener; +import com.itmill.toolkit.external.org.apache.commons.fileupload.servlet.ServletFileUpload; import com.itmill.toolkit.Application; import com.itmill.toolkit.Application.WindowAttachEvent; -- 2.39.5