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");
>      }
>
>      /**
>
>

Reply via email to