You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ak...@locus.apache.org on 2000/02/06 21:40:43 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/core LocalStrings.properties Request.java RequestDispatcherImpl.java Response.java
akv 00/02/06 12:40:43
Modified: src/etc Tag: latest_TOMCAT_30 readme
src/share/org/apache/jasper/compiler Tag: latest_TOMCAT_30
Compiler.java EscapeUnicodeWriter.java
src/share/org/apache/jasper/runtime Tag: latest_TOMCAT_30
JspLoader.java
src/share/org/apache/tomcat/core Tag: latest_TOMCAT_30
LocalStrings.properties Request.java
RequestDispatcherImpl.java Response.java
Log:
Integrated select patches into the branch...
Revision Changes Path
No revision
No revision
1.7.2.1 +1 -8 jakarta-tomcat/src/etc/readme
Index: readme
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/etc/readme,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- readme 1999/12/15 01:35:28 1.7
+++ readme 2000/02/06 20:40:41 1.7.2.1
@@ -1,4 +1,4 @@
-$Id: readme,v 1.7 1999/12/15 01:35:28 akv Exp $
+$Id: readme,v 1.7.2.1 2000/02/06 20:40:41 akv Exp $
Tomcat 3.0
@@ -59,13 +59,6 @@
2. The web server crashes with a StackOverflowException if there
is infinite recursion in RequestDispatcher.forward/include or
<jsp:forward/include .../>.
-
-3. The JSP container may generate invalid Java code from JSP pages if
- multiple pages are being accessed for the first time at roughly the
- same time. This results in a compilation error. A work-around is to
- access the JSP pages one at the time to get correct code generated.
- When the code is generated and compiled, there are no known
- multi-threading issues.
TROUBLESHOOTING
---------------
No revision
No revision
1.3.2.3 +4 -3 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.2.2
retrieving revision 1.3.2.3
diff -u -r1.3.2.2 -r1.3.2.3
--- Compiler.java 2000/02/04 01:37:14 1.3.2.2
+++ Compiler.java 2000/02/06 20:40:41 1.3.2.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/Compiler.java,v 1.3.2.2 2000/02/04 01:37:14 mandar Exp $
- * $Revision: 1.3.2.2 $
- * $Date: 2000/02/04 01:37:14 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/Compiler.java,v 1.3.2.3 2000/02/06 20:40:41 akv Exp $
+ * $Revision: 1.3.2.3 $
+ * $Date: 2000/02/06 20:40:41 $
*
* ====================================================================
*
@@ -122,6 +122,7 @@
Constants.message("jsp.message.class_file_name_is",
new Object[] { classFileName },
Constants.MED_VERBOSITY);
+
if (!isOutDated())
return false;
1.1.1.1.4.1 +4 -4 jakarta-tomcat/src/share/org/apache/jasper/compiler/EscapeUnicodeWriter.java
Index: EscapeUnicodeWriter.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/EscapeUnicodeWriter.java,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.4.1
diff -u -r1.1.1.1 -r1.1.1.1.4.1
--- EscapeUnicodeWriter.java 1999/10/09 00:20:35 1.1.1.1
+++ EscapeUnicodeWriter.java 2000/02/06 20:40:41 1.1.1.1.4.1
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/EscapeUnicodeWriter.java,v 1.1.1.1 1999/10/09 00:20:35 duncan Exp $
- * $Revision: 1.1.1.1 $
- * $Date: 1999/10/09 00:20:35 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/EscapeUnicodeWriter.java,v 1.1.1.1.4.1 2000/02/06 20:40:41 akv Exp $
+ * $Revision: 1.1.1.1.4.1 $
+ * $Date: 2000/02/06 20:40:41 $
*
* ====================================================================
*
@@ -88,7 +88,7 @@
int ci = off, end = off + len;
while ( --len >= 0 ) {
- int ch = buf[off++] & 0xff;
+ int ch = buf[off++] & 0xffff;
/*
* Write out unicode characters as \u0000
*/
No revision
No revision
1.2.4.1 +6 -5 jakarta-tomcat/src/share/org/apache/jasper/runtime/JspLoader.java
Index: JspLoader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/runtime/JspLoader.java,v
retrieving revision 1.2
retrieving revision 1.2.4.1
diff -u -r1.2 -r1.2.4.1
--- JspLoader.java 1999/10/21 01:48:42 1.2
+++ JspLoader.java 2000/02/06 20:40:42 1.2.4.1
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/runtime/JspLoader.java,v 1.2 1999/10/21 01:48:42 akv Exp $
- * $Revision: 1.2 $
- * $Date: 1999/10/21 01:48:42 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/jasper/runtime/JspLoader.java,v 1.2.4.1 2000/02/06 20:40:42 akv Exp $
+ * $Revision: 1.2.4.1 $
+ * $Date: 2000/02/06 20:40:42 $
*
* ====================================================================
*
@@ -207,8 +207,9 @@
* @param classpath explicitly set the JSP compilation path.
* @return true if JSP files is newer
*/
- public boolean loadJSP(String name, String classpath, boolean isErrorPage,
- HttpServletRequest req, HttpServletResponse res)
+ public synchronized boolean loadJSP(String name, String classpath,
+ boolean isErrorPage, HttpServletRequest req,
+ HttpServletResponse res)
throws JasperException, FileNotFoundException
{
Class jspClass = (Class) loadedJSPs.get(name);
No revision
No revision
1.2.2.1 +4 -1 jakarta-tomcat/src/share/org/apache/tomcat/core/LocalStrings.properties
Index: LocalStrings.properties
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/LocalStrings.properties,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- LocalStrings.properties 1999/10/31 19:27:59 1.2
+++ LocalStrings.properties 2000/02/06 20:40:42 1.2.2.1
@@ -1,4 +1,4 @@
-# $Id: LocalStrings.properties,v 1.2 1999/10/31 19:27:59 costin Exp $
+# $Id: LocalStrings.properties,v 1.2.2.1 2000/02/06 20:40:42 akv Exp $
#
# Localized strings for package org.apache.tomcat.core
@@ -45,6 +45,9 @@
rdi.forward.ise=Cannot forward as OutputStream or Writer has already been obtained
serverSession.value.iae=null value
+
+serverReponse.outputStream.ise=getWriter() has already been called
+serverResponse.ise.writer.ise=getOutputStream() has already been called
servletLoader.load.mfue=trouble resolving class name: {0}
servletLoader.load.ioe=trouble reading class file: {0}
1.8.2.1 +68 -4 jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java
Index: Request.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -r1.8 -r1.8.2.1
--- Request.java 1999/11/03 20:38:52 1.8
+++ Request.java 2000/02/06 20:40:42 1.8.2.1
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java,v 1.8 1999/11/03 20:38:52 costin Exp $
- * $Revision: 1.8 $
- * $Date: 1999/11/03 20:38:52 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java,v 1.8.2.1 2000/02/06 20:40:42 akv Exp $
+ * $Revision: 1.8.2.1 $
+ * $Date: 2000/02/06 20:40:42 $
*
* ====================================================================
*
@@ -78,6 +78,7 @@
* @author James Todd [gonzo@eng.sun.com]
* @author Jason Hunter [jch@eng.sun.com]
* @author Harish Prabandham
+ * @author Alex Cruikshank [alex@apitonic.com]
*/
public class Request {
// XXX used by forward to override, need a better
@@ -85,7 +86,7 @@
protected String requestURI;
protected String queryString;
- // RequestAdapterImpl Hints
+ // RequestAdapterImpl Hints
String serverName;
protected Vector cookies = new Vector();
@@ -227,6 +228,22 @@
return parameters.keys();
}
+
+ /**
+ * Used by RequestDispatcherImpl to get a copy of the
+ * original parameters before adding parameters from the
+ * query string, if any.
+ */
+ public Hashtable getParametersCopy() {
+ if (!didParameters) {
+ processFormData(getQueryString());
+ }
+ if (!didReadFormData) {
+ readFormData();
+ }
+ return (Hashtable) parameters.clone();
+ }
+
public String getAuthType() {
@@ -466,7 +483,54 @@
// public void setScheme(String scheme) {
// this.scheme = scheme;
// }
+
+
+ /**
+ * Adds a query string to the existing set of parameters.
+ * The additional parameters represented by the query string will be
+ * merged with the existing parameters.
+ * Used by the RequestDispatcherImpl to add query string parameters
+ * to the request.
+ *
+ * @param inQueryString URLEncoded parameters to add
+ */
+ public void addQueryString(String inQueryString) {
+ // if query string is null, do nothing
+ if ((inQueryString == null) || (inQueryString.trim().length() <= 0))
+ return;
+
+ // add query string to existing string
+ if ((queryString == null) || (queryString.trim().length() <= 0))
+ queryString = inQueryString;
+ else
+ queryString = inQueryString + "&" + queryString;
+
+ // process parameters
+ Hashtable newParameters = null;
+ try {
+ newParameters = HttpUtils.parseQueryString(queryString);
+ } catch (Exception e) {
+ return;
+ }
+
+ // merge new parameters with existing parameters
+ if (newParameters != null)
+ parameters = RequestUtil.mergeParameters(newParameters, parameters);
+ }
+
+ /**
+ * Replaces the query string without processing the parameters.
+ * Used by the RequestDispatcherImpl to restore the original
+ * query string.
+ *
+ * @param inQueryString queryString to replace
+ */
+ public void replaceQueryString(String inQueryString) {
+ this.queryString = inQueryString;
+ }
+
+
public void setRequestedSessionId(String reqSessionId) {
this.reqSessionId = reqSessionId;
}
1.2.2.1 +20 -42 jakarta-tomcat/src/share/org/apache/tomcat/core/RequestDispatcherImpl.java
Index: RequestDispatcherImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestDispatcherImpl.java,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- RequestDispatcherImpl.java 1999/11/03 20:38:52 1.2
+++ RequestDispatcherImpl.java 2000/02/06 20:40:43 1.2.2.1
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestDispatcherImpl.java,v 1.2 1999/11/03 20:38:52 costin Exp $
- * $Revision: 1.2 $
- * $Date: 1999/11/03 20:38:52 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestDispatcherImpl.java,v 1.2.2.1 2000/02/06 20:40:43 akv Exp $
+ * $Revision: 1.2.2.1 $
+ * $Date: 2000/02/06 20:40:43 $
*
* ====================================================================
*
@@ -66,6 +66,7 @@
import org.apache.tomcat.util.StringManager;
import java.io.*;
+import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
@@ -75,6 +76,7 @@
* @author James Duncan Davidson [duncan@eng.sun.com]
* @author Jason Hunter [jch@eng.sun.com]
* @author James Todd [gonzo@eng.sun.com]
+ * @author Alex Cruikshank [alex@epitonic.com]
*/
public class RequestDispatcherImpl implements RequestDispatcher {
@@ -113,23 +115,12 @@
ForwardedRequest fRequest =
new ForwardedRequest(realRequest, urlPath);
- // join the query strings of the destination request
- // with the originaing request in that order.
-
- String aggregatedQueryString = this.queryString;
-
- if (realRequest.getQueryString() != null &&
- realRequest.getQueryString().trim().length() > 0) {
- if (aggregatedQueryString == null) {
- aggregatedQueryString = realRequest.getQueryString();
- } else {
- aggregatedQueryString += "&" + realRequest.getQueryString();
- }
- }
-
+ // add new query string parameters to request
+ // if names are duplicates, new valeus will be prepended to arrays
+ reqFacade.getRealRequest().addQueryString(queryString);
+
fRequest.setServletPath(this.lookupResult.getServletPath());
fRequest.setPathInfo(this.lookupResult.getPathInfo());
- fRequest.setQueryString(aggregatedQueryString);
this.lookupResult.getWrapper().handleRequest(fRequest, resFacade);
}
@@ -161,6 +152,7 @@
Request realRequest = reqFacade.getRealRequest();
Response realResponse = resFacade.getRealResponse();
String originalQueryString = realRequest.getQueryString();
+ Hashtable originalParameters = realRequest.getParametersCopy();
// XXX
// not sure why we're pre-pending context.getPath() here
@@ -185,38 +177,24 @@
req.setAttribute(Constants.Attribute.PathInfo,
lookupResult.getPathInfo());
}
-
- // join the query strings of the destination request
- // with the originaing request in that order.
-
- String aggregatedQueryString = this.queryString;
- if (realRequest.getQueryString() != null &&
- realRequest.getQueryString().trim().length() > 0) {
- if (aggregatedQueryString == null) {
- aggregatedQueryString = realRequest.getQueryString();
- } else {
- aggregatedQueryString += "&" + realRequest.getQueryString();
- }
- }
+ // add new query string parameters to request
+ // if names are duplicates, new values will be prepended to arrays
+ reqFacade.getRealRequest().addQueryString( this.queryString );
+
- if (aggregatedQueryString != null) {
+ if (reqFacade.getRealRequest().getQueryString() != null) {
req.setAttribute(Constants.Attribute.QueryString,
- aggregatedQueryString);
+ reqFacade.getRealRequest().getQueryString());
}
-
- // inline the aggregated query string for the scope
- // of the include
-
- reqFacade.getRealRequest().setQueryString(aggregatedQueryString);
IncludedResponse iResponse = new IncludedResponse(realResponse);
lookupResult.getWrapper().handleRequest(reqFacade, iResponse);
-
- // revert the query string to its original value
-
- reqFacade.getRealRequest().setQueryString(originalQueryString);
+
+ // revert the parameters and query string to its original value
+ reqFacade.getRealRequest().setParameters(originalParameters);
+ reqFacade.getRealRequest().replaceQueryString(originalQueryString);
if (request_uri != null) {
req.setAttribute(Constants.Attribute.RequestURI, request_uri);
1.4.2.2 +8 -7 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.2.1
retrieving revision 1.4.2.2
diff -u -r1.4.2.1 -r1.4.2.2
--- Response.java 2000/02/03 02:57:45 1.4.2.1
+++ Response.java 2000/02/06 20:40:43 1.4.2.2
@@ -1,7 +1,7 @@
/*
- * $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 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v 1.4.2.2 2000/02/06 20:40:43 akv Exp $
+ * $Revision: 1.4.2.2 $
+ * $Date: 2000/02/06 20:40:43 $
*
* ====================================================================
*
@@ -76,6 +76,7 @@
* @author Jason Hunter [jch@eng.sun.com]
* @author James Todd [gonzo@eng.sun.com]
* @author Harish Prabandham
+ * @author Hans Bergsten <ha...@gefionsoftware.com>
*/
public class Response {
protected StringManager sm =
@@ -356,14 +357,14 @@
cookieEnum = systemCookies.elements();
while (cookieEnum.hasMoreElements()) {
Cookie c = (Cookie)cookieEnum.nextElement();
- headers.putHeader( CookieTools.getCookieHeaderName(c),
+ headers.addHeader( CookieTools.getCookieHeaderName(c),
CookieTools.getCookieHeaderValue(c));
if( c.getVersion() == 1 ) {
// add a version 0 header too.
// XXX what if the user set both headers??
Cookie c0 = (Cookie)c.clone();
c0.setVersion(0);
- headers.putHeader( CookieTools.getCookieHeaderName(c0),
+ headers.addHeader( CookieTools.getCookieHeaderName(c0),
CookieTools.getCookieHeaderValue(c0));
}
}
@@ -371,14 +372,14 @@
cookieEnum = userCookies.elements();
while (cookieEnum.hasMoreElements()) {
Cookie c = (Cookie)cookieEnum.nextElement();
- headers.putHeader( CookieTools.getCookieHeaderName(c),
+ headers.addHeader( CookieTools.getCookieHeaderName(c),
CookieTools.getCookieHeaderValue(c));
if( c.getVersion() == 1 ) {
// add a version 0 header too.
// XXX what if the user set both headers??
Cookie c0 = (Cookie)c.clone();
c0.setVersion(0);
- headers.putHeader( CookieTools.getCookieHeaderName(c0),
+ headers.addHeader( CookieTools.getCookieHeaderName(c0),
CookieTools.getCookieHeaderValue(c0));
}
}