markt 2005/01/14 14:55:22 Modified: catalina/src/share/org/apache/catalina/servlets HTMLManagerServlet.java Log: Better align upload behaviour of Manager & HTMLManager Revision Changes Path 1.20 +38 -13 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/HTMLManagerServlet.java Index: HTMLManagerServlet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/HTMLManagerServlet.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- HTMLManagerServlet.java 5 Jan 2005 11:54:37 -0000 1.19 +++ HTMLManagerServlet.java 14 Jan 2005 22:55:22 -0000 1.20 @@ -21,8 +21,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; -import java.net.URL; import java.net.MalformedURLException; +import java.net.URL; import java.text.MessageFormat; import java.util.Iterator; import java.util.List; @@ -36,8 +36,8 @@ import org.apache.catalina.Host; import org.apache.catalina.util.RequestUtil; import org.apache.catalina.util.ServerInfo; -import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.DiskFileUpload; +import org.apache.commons.fileupload.FileItem; /** * Servlet that enables remote management of the web applications installed @@ -145,8 +145,11 @@ response.setLocale(locale); response.setContentType("text/html; charset=" + charset); - String message = ""; + StringWriter stringWriter = new StringWriter(); + PrintWriter writer = new PrintWriter(stringWriter); + boolean uploadFailed = true; + // Create a new file upload handler DiskFileUpload upload = new DiskFileUpload(); @@ -160,6 +163,8 @@ // Parse the request String war = null; FileItem warUpload = null; + File xmlFile = null; + try { List items = upload.parseRequest(request); @@ -179,14 +184,14 @@ } while(true) { if (warUpload == null) { - message = sm.getString - ("htmlManagerServlet.installUploadNoFile"); + writer.println(sm.getString + ("htmlManagerServlet.installUploadNoFile")); break; } war = warUpload.getName(); if (!war.toLowerCase().endsWith(".war")) { - message = sm.getString - ("htmlManagerServlet.installUploadNotWar",war); + writer.println(sm.getString + ("htmlManagerServlet.installUploadNotWar",war)); break; } // Get the filename if uploaded name includes a path @@ -196,6 +201,9 @@ if (war.lastIndexOf('/') >= 0) { war = war.substring(war.lastIndexOf('/') + 1); } + + String xmlName = war.substring(0,war.length()-4) + ".xml"; + // Identify the appBase of the owning Host of this Context // (if any) String appBase = null; @@ -208,8 +216,8 @@ } File file = new File(appBaseDir,war); if (file.exists()) { - message = sm.getString - ("htmlManagerServlet.installUploadWarExists",war); + writer.println(sm.getString + ("htmlManagerServlet.installUploadWarExists",war)); break; } warUpload.write(file); @@ -221,12 +229,20 @@ file.delete(); throw e; } + + // Extract the context.xml file, if any + xmlFile = new File(appBaseDir, xmlName); + extractXml(file, xmlFile); + + uploadFailed = false; + break; } } catch(Exception e) { - message = sm.getString + String message = sm.getString ("htmlManagerServlet.installUploadFail", e.getMessage()); log(message, e); + writer.println(message); } finally { if (warUpload != null) { warUpload.delete(); @@ -234,11 +250,19 @@ warUpload = null; } + // Define the context.xml URL if present + String xmlURL = null; + if (xmlFile != null && xmlFile.exists()) { + xmlURL = new String("file:" + xmlFile.getAbsolutePath()); + } + // If there were no errors, install the WAR - if (message.length() == 0) { - message = install(null, null, war); + if (!uploadFailed) { + install(writer, xmlURL, null, war); } + String message = stringWriter.toString(); + list(request, response, message); } @@ -528,6 +552,7 @@ return stringWriter.toString(); } + // ------------------------------------------------------ Private Constants // These HTML sections are broken in relatively small sections, because of
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]