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 2013/01/25 13:08:24 UTC
svn commit: r1438464 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/jasper/runtime/JspContextWrapper.java
webapps/docs/changelog.xml
Author: markt
Date: Fri Jan 25 12:08:23 2013
New Revision: 1438464
URL: http://svn.apache.org/viewvc?rev=1438464&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53869
Performance improvement for pages with lots of heavily nested tags. Retain a reference to the root JSP context rather than traversing the hierarchy on every call.
Based on a patch suggested by Sheldon Shao.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1438463
Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java?rev=1438464&r1=1438463&r2=1438464&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java Fri Jan 25 12:08:23 2013
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.jasper.runtime;
import java.io.IOException;
@@ -77,10 +76,22 @@ public class JspContextWrapper extends P
private HashMap<String, Object> originalNestedVars;
+ private ServletContext servletContext = null;
+
+ private ELContext elContext = null;
+
+ private PageContext rootJspCtxt;
+
public JspContextWrapper(JspContext jspContext,
ArrayList<String> nestedVars, ArrayList<String> atBeginVars,
ArrayList<String> atEndVars, Map<String,String> aliases) {
this.invokingJspCtxt = (PageContext) jspContext;
+ if (jspContext instanceof JspContextWrapper) {
+ rootJspCtxt = ((JspContextWrapper)jspContext).rootJspCtxt;
+ }
+ else {
+ rootJspCtxt = invokingJspCtxt;
+ }
this.nestedVars = nestedVars;
this.atBeginVars = atBeginVars;
this.atEndVars = atEndVars;
@@ -123,7 +134,7 @@ public class JspContextWrapper extends P
return pageAttributes.get(name);
}
- return invokingJspCtxt.getAttribute(name, scope);
+ return rootJspCtxt.getAttribute(name, scope);
}
@Override
@@ -156,7 +167,7 @@ public class JspContextWrapper extends P
removeAttribute(name, PAGE_SCOPE);
}
} else {
- invokingJspCtxt.setAttribute(name, value, scope);
+ rootJspCtxt.setAttribute(name, value, scope);
}
}
@@ -170,13 +181,13 @@ public class JspContextWrapper extends P
Object o = pageAttributes.get(name);
if (o == null) {
- o = invokingJspCtxt.getAttribute(name, REQUEST_SCOPE);
+ o = rootJspCtxt.getAttribute(name, REQUEST_SCOPE);
if (o == null) {
if (getSession() != null) {
- o = invokingJspCtxt.getAttribute(name, SESSION_SCOPE);
+ o = rootJspCtxt.getAttribute(name, SESSION_SCOPE);
}
if (o == null) {
- o = invokingJspCtxt.getAttribute(name, APPLICATION_SCOPE);
+ o = rootJspCtxt.getAttribute(name, APPLICATION_SCOPE);
}
}
}
@@ -193,11 +204,11 @@ public class JspContextWrapper extends P
}
pageAttributes.remove(name);
- invokingJspCtxt.removeAttribute(name, REQUEST_SCOPE);
+ rootJspCtxt.removeAttribute(name, REQUEST_SCOPE);
if (getSession() != null) {
- invokingJspCtxt.removeAttribute(name, SESSION_SCOPE);
+ rootJspCtxt.removeAttribute(name, SESSION_SCOPE);
}
- invokingJspCtxt.removeAttribute(name, APPLICATION_SCOPE);
+ rootJspCtxt.removeAttribute(name, APPLICATION_SCOPE);
}
@Override
@@ -211,7 +222,7 @@ public class JspContextWrapper extends P
if (scope == PAGE_SCOPE) {
pageAttributes.remove(name);
} else {
- invokingJspCtxt.removeAttribute(name, scope);
+ rootJspCtxt.removeAttribute(name, scope);
}
}
@@ -226,7 +237,7 @@ public class JspContextWrapper extends P
if (pageAttributes.get(name) != null) {
return PAGE_SCOPE;
} else {
- return invokingJspCtxt.getAttributesScope(name);
+ return rootJspCtxt.getAttributesScope(name);
}
}
@@ -236,7 +247,7 @@ public class JspContextWrapper extends P
return Collections.enumeration(pageAttributes.keySet());
}
- return invokingJspCtxt.getAttributeNamesInScope(scope);
+ return rootJspCtxt.getAttributeNamesInScope(scope);
}
@Override
@@ -246,12 +257,12 @@ public class JspContextWrapper extends P
@Override
public JspWriter getOut() {
- return invokingJspCtxt.getOut();
+ return rootJspCtxt.getOut();
}
@Override
public HttpSession getSession() {
- return invokingJspCtxt.getSession();
+ return rootJspCtxt.getSession();
}
@Override
@@ -266,7 +277,7 @@ public class JspContextWrapper extends P
@Override
public ServletResponse getResponse() {
- return invokingJspCtxt.getResponse();
+ return rootJspCtxt.getResponse();
}
@Override
@@ -281,7 +292,10 @@ public class JspContextWrapper extends P
@Override
public ServletContext getServletContext() {
- return invokingJspCtxt.getServletContext();
+ if (servletContext == null) {
+ servletContext = rootJspCtxt.getServletContext();
+ }
+ return servletContext;
}
@Override
@@ -481,7 +495,10 @@ public class JspContextWrapper extends P
public ELContext getELContext() {
// instead decorate!!!
- return this.invokingJspCtxt.getELContext();
+ if (elContext == null) {
+ elContext = rootJspCtxt.getELContext();
+ }
+ return elContext;
/*
if (this.elContext != null) {
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1438464&r1=1438463&r2=1438464&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Fri Jan 25 12:08:23 2013
@@ -101,6 +101,12 @@
<subsection name="Jasper">
<changelog>
<fix>
+ <bug>53869</bug>: Performance improvement for pages with lots of heavily
+ nested tags. Retain a reference to the root JSP context rather than
+ traversing the hierarchy on every call. Based on a patch suggested by
+ Sheldon Shao. (markt)
+ </fix>
+ <fix>
<bug>54440</bug>: Correct a regression caused by the changes for
<bug>54240</bug> that broke compilation of JSPs with JspC. Patch
provided by Sheldon Shao. (markt)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org