You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@locus.apache.org on 2000/02/03 03:57:45 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/core Response.java
mandar 00/02/02 18:57:45
Modified: src/share/org/apache/jasper/compiler Tag: latest_TOMCAT_30
Compiler.java JspReader.java
src/share/org/apache/tomcat/core Tag: latest_TOMCAT_30
Response.java
Log:
Supporting other encodings and setting the headers.
Revision Changes Path
No revision
No revision
1.3.2.1 +75 -6 jakarta-tomcat/src/share/org/apache/jasper/compiler/Compiler.java
Index: Compiler.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/Compiler.java,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- Compiler.java 1999/11/03 23:43:02 1.3
+++ Compiler.java 2000/02/03 02:57:44 1.3.2.1
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/Compiler.java,v 1.3 1999/11/03 23:43:02 costin Exp $
- * $Revision: 1.3 $
- * $Date: 1999/11/03 23:43:02 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/Compiler.java,v 1.3.2.1 2000/02/03 02:57:44 mandar Exp $
+ * $Revision: 1.3.2.1 $
+ * $Date: 2000/02/03 02:57:44 $
*
* ====================================================================
*
@@ -66,6 +66,8 @@
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
+import java.util.Hashtable;
+
import org.apache.jasper.JspEngineContext;
import org.apache.jasper.Constants;
import org.apache.jasper.JasperException;
@@ -119,13 +121,42 @@
new Object[] { classFileName },
Constants.MED_VERBOSITY);
- JspReader reader = JspReader.createJspReader(ctxt.getJspFile(), ctxt.getServletContext());
+
+ // Need the encoding specified in the JSP 'page' directive for
+ // - reading the JSP page
+ // - writing the JSP servlet source
+ // - compiling the generated servlets (pass -encoding to javac).
+ // XXX - There are really three encodings of interest.
+
+ String jspEncoding = "8859_1"; // default per JSP spec
+ String javaEncoding = "UTF8"; // perhaps debatable?
+
+ // This seems to be a reasonable point to scan the JSP file
+ // for a 'contentType' directive. If it found then the set
+ // the value of 'jspEncoding to reflect the value specified.
+
+ // specifies whether the JSP contains a non-default encoding to
+ // save this agony (two-phase parsing).
+
+ if (true) {
+ JspReader tmpReader = JspReader.createJspReader(
+ ctxt.getJspFile(),
+ ctxt.getServletContext(),
+ jspEncoding);
+ String newEncode = changeEncodingIfNecessary(tmpReader);
+ if (newEncode != null) jspEncoding = newEncode;
+
+ }
+
+ JspReader reader = JspReader.createJspReader(ctxt.getJspFile(),
+ ctxt.getServletContext(),
+ jspEncoding);
ServletWriter writer =
(new ServletWriter
(new PrintWriter
- (new EscapeUnicodeWriter
- (new FileOutputStream(javaFileName)))));
+ (new java.io.OutputStreamWriter
+ (new FileOutputStream(javaFileName), javaEncoding))));
ctxt.setReader(reader);
ctxt.setWriter(writer);
@@ -259,4 +290,42 @@
public void setMangler(Mangler mangler) {
this.mangler = mangler;
}
+
+ /**
+ * Change the encoding for the reader if specified.
+ */
+ public String changeEncodingIfNecessary(JspReader tmpReader) {
+
+ // A lot of code replicated from Parser.java
+ // Main aim is to "get-it-to-work".
+ while (tmpReader.skipUntil("<%@") != null) {
+
+ tmpReader.skipSpaces();
+
+ // check if it is a page directive.
+ if (tmpReader.matches("page")) {
+
+ tmpReader.advance(4);
+ tmpReader.skipSpaces();
+
+ try {
+ Hashtable attrs = tmpReader.parseTagAttributes();
+ String ct = (String) attrs.get("contentType");
+ if (ct != null) {
+ int loc = ct.indexOf("charset=");
+ if (loc > 0) {
+ String encoding = ct.substring(loc + 8);
+ return encoding;
+ }
+ }
+ } catch (ParseException ex) {
+ // Ignore the exception here, it will be caught later.
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
}
+
1.5.2.1 +6 -5 jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java
Index: JspReader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- JspReader.java 1999/12/15 01:15:50 1.5
+++ JspReader.java 2000/02/03 02:57:44 1.5.2.1
@@ -184,7 +184,7 @@
throw new FileNotFoundException(fileName);
try {
- reader = new InputStreamReader(in);
+ reader = new InputStreamReader(in, encoding);
} catch (Exception ex) {
throw new FileNotFoundException(fileName + ": "+ ex.getMessage());
}
@@ -239,17 +239,18 @@
return true;
}
- protected JspReader(String file, ServletContext ctx)
+ protected JspReader(String file, ServletContext ctx, String encoding)
throws ParseException, FileNotFoundException
{
this.context = ctx;
- pushFile(file, null);
+ pushFile(file, encoding);
}
- public static JspReader createJspReader(String file, ServletContext ctx)
+ public static JspReader createJspReader(String file, ServletContext ctx,
+ String encoding)
throws ParseException, FileNotFoundException
{
- return new JspReader(file, ctx);
+ return new JspReader(file, ctx, encoding);
}
public boolean hasMoreInput() {
No revision
No revision
1.4.2.1 +7 -3 jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java
Index: Response.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- Response.java 1999/12/14 00:15:36 1.4
+++ Response.java 2000/02/03 02:57:45 1.4.2.1
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v 1.4 1999/12/14 00:15:36 costin Exp $
- * $Revision: 1.4 $
- * $Date: 1999/12/14 00:15:36 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v 1.4.2.1 2000/02/03 02:57:45 mandar Exp $
+ * $Revision: 1.4.2.1 $
+ * $Date: 2000/02/03 02:57:45 $
*
* ====================================================================
*
@@ -427,6 +427,8 @@
// Use the setContentType() method so encoding is set properly
String newType = constructLocalizedContentType(contentType, locale);
setContentType(newType);
+
+ addHeader("Content-Language", contentLanguage);
}
String constructLocalizedContentType(String type, Locale loc) {
@@ -455,10 +457,12 @@
if (encoding != null) {
characterEncoding = encoding;
}
+ addHeader("Content-Type", contentType);
}
public void setContentLength(int contentLength) {
this.contentLength = contentLength;
+ addHeader("Content-Length", (new Integer(contentLength)).toString());
}
public int getStatus() {