This problem causes severe memory leaks in JBoss app server with Jetty servlet container installed (that is using Jasper). I tested it with JBoss 3.2.6RC1 and Jetty 5.0.0. Please see related bug reports: https://sourceforge.net/tracker/? func=detail&aid=973162&group_id=22866&atid=376685 and https://sourceforge.net/tracker/? func=detail&aid=1038066&group_id=7322&atid=107322. In short, after JBoss web application context is destroyed, there is still a hard reference chain (see http://kanika.yi.org/~alexei/jbossleaks/refs-from-jasper5-PageContext-pool-to- UnifiedClassLoader3.html) from Jasper's pool of JspContexts to JBoss' UnifiedClassLoader3. The most logical place to break the chain is, in my opinion, to set org.apache.jasper.runtime.JspWriterImpl.response field to null inside JspWriterImpl.recycle() method. It looks safe, because JspWriterImpl is always initialized with a new response object before use. And it looks logical, because why should a recycled JspWriter keep reference to a response which it will never make use of, being recycled. In my test instalation, adding response = null; to JspWriterImpl.recycle() resolves the problem.
Fixed in Tomcat 5.0 branch, will fix in 5.5 branch after my 11am meeting. Thanks for tracking and reporting this.
Fixed.