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...@apache.org on 2005/04/04 22:57:02 UTC
cvs commit: jakarta-tomcat-catalina/webapps/docs changelog.xml ssi-howto.xml
markt 2005/04/04 13:57:02
Modified: catalina/src/conf web.xml
catalina/src/share/org/apache/catalina/ssi SSIServlet.java
SSIServletExternalResolver.java
webapps/docs changelog.xml ssi-howto.xml
Log:
Fix bug 10385. Improve support for files that use character encodings other than
the platform default with the SSI servlet.
- Ported from TC4
Revision Changes Path
1.56 +7 -0 jakarta-tomcat-catalina/catalina/src/conf/web.xml
Index: web.xml
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/conf/web.xml,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- web.xml 18 Dec 2004 12:04:40 -0000 1.55
+++ web.xml 4 Apr 2005 20:57:02 -0000 1.56
@@ -226,6 +226,13 @@
<!-- relative to the context root, instead of -->
<!-- the server root? (0=false, 1=true) [0] -->
<!-- -->
+ <!-- inputEncoding The encoding to assume for SSI resources if -->
+ <!-- one is not available from the resource. -->
+ <!-- [Platform default] -->
+ <!-- -->
+ <!-- outputEncoding The encoding to use for the page that results -->
+ <!-- from the SSI processing. [UTF-8] -->
+ <!-- -->
<!-- -->
<!-- IMPORTANT: To use the SSI servlet, you also need to rename the -->
<!-- $CATALINA_HOME/server/lib/servlets-ssi.renametojar file -->
1.9 +34 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java
Index: SSIServlet.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SSIServlet.java 1 Sep 2004 18:33:33 -0000 1.8
+++ SSIServlet.java 4 Apr 2005 20:57:02 -0000 1.9
@@ -44,6 +44,10 @@
protected Long expires = null;
/** virtual path can be webapp-relative */
protected boolean isVirtualWebappRelative = false;
+ /** Input encoding. If not specified, uses platform default */
+ protected String inputEncoding = null;
+ /** Output encoding. If not specified, uses platform default */
+ protected String outputEncoding = "UTF-8";
//----------------- Public methods.
@@ -83,6 +87,19 @@
} catch (Throwable t) {
;
}
+ try {
+ inputEncoding = getServletConfig().getInitParameter("inputEncoding");
+ } catch (Throwable t) {
+ ;
+ }
+ try {
+ value = getServletConfig().getInitParameter("outputEncoding");
+ if (value != null) {
+ outputEncoding = value;
+ }
+ } catch (Throwable t) {
+ ;
+ }
if (debug > 0)
log("SSIServlet.init() SSI invoker started with 'debug'=" + debug);
}
@@ -159,9 +176,9 @@
}
String resourceMimeType = servletContext.getMimeType(path);
if (resourceMimeType == null) {
- resourceMimeType = "text/html;charset=UTF-8";
+ resourceMimeType = "text/html";
}
- res.setContentType(resourceMimeType);
+ res.setContentType(resourceMimeType + ";charset=" + outputEncoding);
if (expires != null) {
res.setDateHeader("Expires", (new java.util.Date()).getTime()
+ expires.longValue() * 1000);
@@ -174,7 +191,7 @@
protected void processSSI(HttpServletRequest req, HttpServletResponse res,
URL resource) throws IOException {
SSIExternalResolver ssiExternalResolver = new SSIServletExternalResolver(
- this, req, res, isVirtualWebappRelative, debug);
+ this, req, res, isVirtualWebappRelative, debug, inputEncoding);
SSIProcessor ssiProcessor = new SSIProcessor(ssiExternalResolver,
debug);
PrintWriter printWriter = null;
@@ -185,10 +202,21 @@
} else {
printWriter = res.getWriter();
}
+
URLConnection resourceInfo = resource.openConnection();
InputStream resourceInputStream = resourceInfo.getInputStream();
- BufferedReader bufferedReader = new BufferedReader(
- new InputStreamReader(resourceInputStream));
+ String encoding = resourceInfo.getContentEncoding();
+ if (encoding == null) {
+ encoding = inputEncoding;
+ }
+ InputStreamReader isr;
+ if (encoding == null) {
+ isr = new InputStreamReader(resourceInputStream);
+ } else {
+ isr = new InputStreamReader(resourceInputStream, encoding);
+ }
+ BufferedReader bufferedReader = new BufferedReader(isr);
+
Date lastModifiedDate = new Date(resourceInfo.getLastModified());
ssiProcessor.process(bufferedReader, lastModifiedDate, printWriter);
if (buffered) {
1.5 +15 -12 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ssi/SSIServletExternalResolver.java
Index: SSIServletExternalResolver.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ssi/SSIServletExternalResolver.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SSIServletExternalResolver.java 1 Sep 2004 18:33:33 -0000 1.4
+++ SSIServletExternalResolver.java 4 Apr 2005 20:57:02 -0000 1.5
@@ -42,16 +42,17 @@
protected HttpServletResponse res;
protected boolean isVirtualWebappRelative;
protected int debug;
-
+ protected String inputEncoding;
public SSIServletExternalResolver(HttpServlet servlet,
HttpServletRequest req, HttpServletResponse res,
- boolean isVirtualWebappRelative, int debug) {
+ boolean isVirtualWebappRelative, int debug, String inputEncoding) {
this.servlet = servlet;
this.req = req;
this.res = res;
this.isVirtualWebappRelative = isVirtualWebappRelative;
this.debug = debug;
+ this.inputEncoding = inputEncoding;
}
@@ -355,11 +356,8 @@
//We are making lots of unnecessary copies of the included data here. If
- // someone ever
- // complains that this
- //is slow, we should connect the included stream to the print writer that
- // SSICommand
- // uses.
+ //someone ever complains that this is slow, we should connect the included
+ // stream to the print writer that SSICommand uses.
public String getFileText(String originalPath, boolean virtual)
throws IOException {
try {
@@ -379,10 +377,15 @@
//We can't assume the included servlet flushed its output
responseIncludeWrapper.flushOutputStreamOrWriter();
byte[] bytes = basos.toByteArray();
- //Assume that the default encoding is what was used to encode the
- // bytes.
- // Questionable.
- String retVal = new String(bytes);
+
+ //Assume platform default encoding unless otherwise specified
+ String retVal;
+ if (inputEncoding == null) {
+ retVal = new String( bytes );
+ } else {
+ retVal = new String (bytes, inputEncoding);
+ }
+
//make an assumption that an empty response is a failure. This is
// a problem
// if a truly empty file
1.283 +4 -0 jakarta-tomcat-catalina/webapps/docs/changelog.xml
Index: changelog.xml
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/changelog.xml,v
retrieving revision 1.282
retrieving revision 1.283
diff -u -r1.282 -r1.283
--- changelog.xml 4 Apr 2005 13:57:49 -0000 1.282
+++ changelog.xml 4 Apr 2005 20:57:02 -0000 1.283
@@ -75,6 +75,10 @@
Store principal to be exposed for Request.getUserPrincipal inside the GenericPrincipal,
to remove hacks from the JAAS realm (remm)
</update>
+ <fix>
+ <bug>10385</bug>: SSI Servlet now includes better support for files that use character
+ encodings other than the platform default.(markt)
+ </fix>
</changelog>
</subsection>
1.3 +5 -0 jakarta-tomcat-catalina/webapps/docs/ssi-howto.xml
Index: ssi-howto.xml
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/ssi-howto.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ssi-howto.xml 15 Jan 2003 03:40:43 -0000 1.2
+++ ssi-howto.xml 4 Apr 2005 20:57:02 -0000 1.3
@@ -65,6 +65,11 @@
<li><strong>isVirtualWebappRelative</strong> - Should "virtual" SSI directive
paths be interpreted as relative to the context root, instead of the server
root? (0=false, 1=true) Default 0 (false).</li>
+<li><strong>inputEncoding</strong> - The encoding to be assumed for SSI
+resources if one cannot be determined from the resource itself. Default is
+the default platform encoding.</li>
+<li><strong>outputEncoding</strong> - The encoding to be used for the result
+of the SSI processing. Default is UTF-8.</li>
</ul>
</p>
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org