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.java2001/05/16 06:02:48 1.6
+++ JspCompiler.java2001/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);
}
/**