You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ki...@apache.org on 2001/12/12 02:19:35 UTC
cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/runtime PageContextImpl.java
kinman 01/12/11 17:19:35
Modified: jasper/src/share/org/apache/jasper/compiler JspReader.java
jasper/src/share/org/apache/jasper/runtime
PageContextImpl.java
Log:
PR: 5345
- This bug is caused by the recent change in response.sendRedirect in catalina
that (correctly) enforces the rule that the response object is closed
after a call to sendRedirect and subsequent write or flush throws an
IllegalStateException.
There is no real fix to this problem except by changing the semantics of
sendRedirect in the Servlet spec to not to return after the call. Since
Jasper has no ideas that response.sendRedirect has been called, it cannot
generate code to skip the rest of the page.
Thus I take the position that it is an user error to include any text
after the call to sendRedirect. I did fixed the reader to ignore the
extra '\n' that got generated automatically by the IO reader.
I also put a check in PageContext.release not to flush the buffer
if the response object has been close. This would enable the user page
to behave as expected, as long as the page is buffered, or the bufer
size is not exceeded.
Revision Changes Path
1.7 +7 -1 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspReader.java
Index: JspReader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspReader.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JspReader.java 2001/06/02 18:44:45 1.6
+++ JspReader.java 2001/12/12 01:19:35 1.7
@@ -332,7 +332,13 @@
*/
public boolean hasMoreInput() throws ParseException {
- if (current.cursor >= current.stream.length) {
+ // An extra '\n' seems to be inserted when there is none at end of
+ // a file. Not only is this useless, but it causes problems when
+ // none is expected (e.g. after response.sendRedirect() ).
+
+ if (current.cursor >= current.stream.length ||
+ ((current.cursor == current.stream.length - 1) &&
+ (peekChar() == '\n'))) {
if (singleFile) return false;
while (popFile()) {
if (current.cursor < current.stream.length) return true;
1.15 +14 -10 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/runtime/PageContextImpl.java
Index: PageContextImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/runtime/PageContextImpl.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- PageContextImpl.java 2001/12/05 00:19:18 1.14
+++ PageContextImpl.java 2001/12/12 01:19:35 1.15
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/runtime/PageContextImpl.java,v 1.14 2001/12/05 00:19:18 kinman Exp $
- * $Revision: 1.14 $
- * $Date: 2001/12/05 00:19:18 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/runtime/PageContextImpl.java,v 1.15 2001/12/12 01:19:35 kinman Exp $
+ * $Revision: 1.15 $
+ * $Date: 2001/12/12 01:19:35 $
*
* ====================================================================
*
@@ -169,14 +169,18 @@
}
public void release() {
- try {
- if (isIncluded) {
- ((JspWriterImpl)out).flushBuffer(); // push it into the including jspWriter
- } else {
- out.flush();
+ // Flush the out stream only if the response is not committed.
+ if (! response.isCommitted()) {
+ try {
+ if (isIncluded) {
+ ((JspWriterImpl)out).flushBuffer();
+ // push it into the including jspWriter
+ } else {
+ out.flush();
+ }
+ } catch (IOException ex) {
+ loghelper.log("Internal error flushing the buffer in release()");
}
- } catch (IOException ex) {
- loghelper.log("Internal error flushing the buffer in release()");
}
servlet = null;
config = null;
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>