I modified this patch a little before applying it:
* The "jsp" variable will have a context relative path that is already
normalized to forward slashes, so looking for File.separator would
fail on Windows.
* The generated filename will be the same length as the last component
of the path, no matter what extension is used. Previous code only
supported changing ".jsp" to "_jsp".
* Character mangling is still necessary to create legal Java class names.
Craig
On Fri, 7 Sep 2001, Kin-Man Chung wrote:
> Date: Fri, 07 Sep 2001 15:18:54 -0700 (PDT)
> From: Kin-Man Chung <[EMAIL PROTECTED]>
> Reply-To: [EMAIL PROTECTED],
> Kin-Man Chung <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Subject: [PATCH] JSP generated file names are too long
>
> This patches fixes Bug 2917. The name of the .java files generated by Jasper
> includes the path name, which can be a problem in Windows if the path name
> is long. Since the files are placed under the directories indicated by the
> path name, there is really no reason to include the pathname with the file
> name.
>
> This fix is based on a submitter's ([EMAIL PROTECTED]) suggestion.
>
> runsocks cvs diff -u JspCompiler.java
> Index: JspCompiler.java
> ===================================================================
> RCS file:
> /home/cvspublic/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/J
> spCompiler.java,v
> retrieving revision 1.6
> diff -u -r1.6 JspCompiler.java
> --- JspCompiler.java 2001/05/16 06:02:48 1.6
> +++ JspCompiler.java 2001/09/07 21:24:48
> @@ -123,40 +123,14 @@
> }
>
> private final String getBaseClassName() {
> - String className;
> -
> + // Only keep the file name, not the path.
> + int iSep = jsp.lastIndexOf(File.separatorChar) + 1;
> + // By luck, also works when '/' is absent
> + int iEnd = jsp.length();
> if (jsp.endsWith(".jsp"))
> - className = jsp.substring(0, jsp.length() - 4);
> - else
> - className = jsp;
> + iEnd = iEnd - 4;
>
> -
> - // Fix for invalid characters. If you think of more add to the list.
> - StringBuffer modifiedClassName = new StringBuffer();
> - for (int i = 0; i < className.length(); i++) {
> - if (Character.isLetterOrDigit(className.charAt(i)) == true)
> - modifiedClassName.append(className.substring(i,i+1));
> - else
> - modifiedClassName.append(mangleChar(className.charAt(i)));
> - }
> - modifiedClassName.append("_jsp");
> - return modifiedClassName.toString();
> - }
> -
> - private static final String mangleChar(char ch) {
> -
> - if(ch == File.separatorChar) {
> - ch = '/';
> - }
> - String s = Integer.toHexString(ch);
> - int nzeros = 5 - s.length();
> - char[] result = new char[6];
> - result[0] = '_';
> - for (int i = 1; i <= nzeros; i++)
> - result[i] = '0';
> - for (int i = nzeros+1, j = 0; i < 6; i++, j++)
> - result[i] = s.charAt(j);
> - return new String(result);
> + return (jsp.substring(iSep, iEnd) + "_jsp");
> }
>
> /**
>
>