crossley 2003/05/30 08:12:26
Modified: src/java/org/apache/cocoon/components/jsp JSPEngineImpl.java Log: Various improvements to the generated JSP page. Response charset should be specified with Content-Type. PR: 14327 Submitted By: miyabe.AT.jzf.co.jp (MIYABE Tatsuhiko) Revision Changes Path 1.3 +39 -8 cocoon-2.0/src/java/org/apache/cocoon/components/jsp/JSPEngineImpl.java Index: JSPEngineImpl.java =================================================================== RCS file: /home/cvs/cocoon-2.0/src/java/org/apache/cocoon/components/jsp/JSPEngineImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- JSPEngineImpl.java 7 May 2003 20:49:34 -0000 1.2 +++ JSPEngineImpl.java 30 May 2003 15:12:26 -0000 1.3 @@ -69,12 +69,14 @@ import java.security.Principal; import java.util.Enumeration; import java.util.Locale; +import java.util.StringTokenizer; /** * Allows JSP to be used as a generator. Builds upon the JSP servlet * functionality - overrides the output method and returns the byte(s). * * @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a> + * @author <a href="mailto:[EMAIL PROTECTED]">MIYABE Tatsuhiko</a> * @version CVS $Id$ */ public class JSPEngineImpl extends AbstractLoggable @@ -217,26 +219,50 @@ */ class MyServletResponse implements HttpServletResponse { HttpServletResponse response; - MyServletOutputStream output; + MyServletOutputStream output = null; + String encoding = "iso-8859-1"; public MyServletResponse(HttpServletResponse response){ this.response = response; - this.output = new MyServletOutputStream(); } public void flushBuffer() throws IOException { } public int getBufferSize() { return 1024; } public String getCharacterEncoding() { return this.response.getCharacterEncoding();} public Locale getLocale(){ return this.response.getLocale();} public PrintWriter getWriter() { + if (this.output == null) { + System.out.println(this.encoding); + this.output = new MyServletOutputStream(this.encoding); + } return this.output.getWriter(); } public boolean isCommitted() { return false; } public void reset() {} public void setBufferSize(int size) {} public void setContentLength(int len) {} - public void setContentType(java.lang.String type) {} + public void setContentType(java.lang.String type) { + StringTokenizer st = new StringTokenizer(type, ";,"); + st.nextToken(); + while (st.hasMoreTokens()) { + String param = st.nextToken(); + int equal = param.indexOf("="); + if (equal != -1) { + String name = param.substring(0, equal); + if (name.trim().equalsIgnoreCase("charset")) { + this.encoding = param.substring(equal + 1).trim(); + break; + } + continue; + } + break; + } + } public void setLocale(java.util.Locale loc) {} public ServletOutputStream getOutputStream() { + if (this.output == null) { + System.out.println(this.encoding); + this.output = new MyServletOutputStream(this.encoding); + } return this.output; } public void addCookie(Cookie cookie){ response.addCookie(cookie); } @@ -262,7 +288,12 @@ public void resetBuffer(){} public byte[] toByteArray() { - return output.toByteArray(); + if (this.output != null) { + return output.toByteArray(); + } + else { + return new byte[0]; + } } } @@ -273,12 +304,12 @@ ByteArrayOutputStream output; PrintWriter writer; - public MyServletOutputStream() { + public MyServletOutputStream(String encoding) { this.output = new ByteArrayOutputStream(); try { - this.writer = new PrintWriter(new OutputStreamWriter(output, "utf-8")); + this.writer = new PrintWriter(new OutputStreamWriter(output, encoding)); } catch (UnsupportedEncodingException e) { - // This can't be true: JVM must support UTF-8 encoding. + // This can't be true: JVM must support the encoding. this.writer = new PrintWriter(new OutputStreamWriter(output)); } }