tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kin...@apache.org
Subject cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime JspRuntimeLibrary.java
Date Wed, 02 Apr 2003 02:04:00 GMT
kinman      2003/04/01 18:04:00

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
               jasper2/src/share/org/apache/jasper/runtime
                        JspRuntimeLibrary.java
  Log:
  - Implement an URL encoder with character encoding (Actaully heavily based
    on catalina/util/URLEncoder.java.
  - URL encode the parameters for jsp:include and jsp:forward with the request
    char encoding.
  
  Revision  Changes    Path
  1.180     +10 -9     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.179
  retrieving revision 1.180
  diff -u -r1.179 -r1.180
  --- Generator.java	31 Mar 2003 21:14:04 -0000	1.179
  +++ Generator.java	2 Apr 2003 02:04:00 -0000	1.180
  @@ -62,7 +62,6 @@
   
   import java.util.*;
   import java.beans.*;
  -import java.net.URLEncoder;
   import java.io.ByteArrayOutputStream;
   import java.io.PrintStream;
   import java.lang.reflect.Method;
  @@ -720,14 +719,14 @@
   		    }
   		}
   		if (encode) {
  -		    return "java.net.URLEncoder.encode(\"\" + " + v + ")";
  +		    return "org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(" + v + ", request.getCharacterEncoding())";
   		}
   		return v;
               } else if( attr.isNamedAttribute() ) {
                   return attr.getNamedAttributeNode().getTemporaryVariableName();
   	    } else {
   		if (encode) {
  -		    v = URLEncoder.encode(v);
  +		    return "org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode(" + quote(v) + ", request.getCharacterEncoding())";
   		}
   		return quote(v);
   	    }
  @@ -753,9 +752,11 @@
   
   		    out.print(" + ");
   		    out.print(separator);
  -		    out.print(" + \"");
  -		    out.print(URLEncoder.encode(n.getTextAttribute("name")));
  -		    out.print("=\" + ");
  +		    out.print(" + ");
  +		    out.print("org.apache.jasper.runtime.JspRuntimeLibrary." +
  +			      "URLEncode(" + quote(n.getTextAttribute("name")) +
  +				         ", request.getCharacterEncoding())");
  +		    out.print("+ \"=\" + ");
   		    out.print(attributeValue(n.getValue(), true, String.class));
   
   		    // The separator is '&' after the second use
  
  
  
  1.20      +77 -3     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/JspRuntimeLibrary.java
  
  Index: JspRuntimeLibrary.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/JspRuntimeLibrary.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- JspRuntimeLibrary.java	31 Mar 2003 17:54:30 -0000	1.19
  +++ JspRuntimeLibrary.java	2 Apr 2003 02:04:00 -0000	1.20
  @@ -992,4 +992,78 @@
   
       }
   
  +    /**
  +     * URL encodes a string, based on the supplied character encoding.
  +     * This performs the same function as java.next.URLEncode.encode
  +     * in J2SDK1.4, and should be removed if the only platform supported
  +     * is 1.4 or higher.
  +     * @param s The String to be URL encoded.
  +     * @param enc The character encoding 
  +     * @return The URL encoded String
  +     */
  +    public static String URLEncode(String s, String enc) {
  +
  +	if (s == null) {
  +	    return "null";
  +	}
  +
  +	if (enc == null) {
  +	    enc = "UTF-8";	// Is this right?
  +	}
  +
  +	StringBuffer out = new StringBuffer(s.length());
  +	ByteArrayOutputStream buf = new ByteArrayOutputStream();
  +	OutputStreamWriter writer = null;
  +	try {
  +	    writer = new OutputStreamWriter(buf, enc);
  +	} catch (java.io.UnsupportedEncodingException ex) {
  +	    // Use the default encoding?
  +	    writer = new OutputStreamWriter(buf);
  +	}
  +	
  +	for (int i = 0; i < s.length(); i++) {
  +	    int c = s.charAt(i);
  +	    if (c == ' ') {
  +		out.append('+');
  +	    } else if (isSafeChar(c)) {
  +		out.append((char)c);
  +	    } else {
  +		// convert to external encoding before hex conversion
  +		try {
  +		    writer.write(c);
  +		    writer.flush();
  +		} catch(IOException e) {
  +		    buf.reset();
  +		    continue;
  +		}
  +		byte[] ba = buf.toByteArray();
  +		for (int j = 0; j < ba.length; j++) {
  +		    out.append('%');
  +		    // Converting each byte in the buffer
  +		    out.append(Character.forDigit((ba[j]>>4) & 0xf, 16));
  +		    out.append(Character.forDigit(ba[j] & 0xf, 16));
  +		}
  +		buf.reset();
  +	    }
  +	}
  +	return out.toString();
  +    }
  +
  +    private static boolean isSafeChar(int c) {
  +	if (c >= 'a' && c <= 'z') {
  +	    return true;
  +	}
  +	if (c >= 'a' && c <= 'z') {
  +	    return true;
  +	}
  +	if (c >= '0' && c <= '9') {
  +	    return true;
  +	}
  +	if (c == '-' || c == '_' || c == '.' || c == '!' ||
  +	    c == '~' || c == '*' || c == '\'' || c == '(' || c == ')') {
  +	    return true;
  +	}
  +	return false;
  +    }
  +
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Mime
View raw message