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:06:04 UTC
svn commit: r1438463 -
/tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
Author: markt
Date: Fri Jan 25 12:06:04 2013
New Revision: 1438463
URL: http://svn.apache.org/viewvc?rev=1438463&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/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
Modified: tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java?rev=1438463&r1=1438462&r2=1438463&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java (original)
+++ tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java Fri Jan 25 12:06:04 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;
@@ -78,10 +77,22 @@ public class JspContextWrapper extends P
private final 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;
@@ -126,7 +137,7 @@ public class JspContextWrapper extends P
return pageAttributes.get(name);
}
- return invokingJspCtxt.getAttribute(name, scope);
+ return rootJspCtxt.getAttribute(name, scope);
}
@Override
@@ -159,7 +170,7 @@ public class JspContextWrapper extends P
removeAttribute(name, PAGE_SCOPE);
}
} else {
- invokingJspCtxt.setAttribute(name, value, scope);
+ rootJspCtxt.setAttribute(name, value, scope);
}
}
@@ -173,13 +184,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);
}
}
}
@@ -196,11 +207,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
@@ -214,7 +225,7 @@ public class JspContextWrapper extends P
if (scope == PAGE_SCOPE) {
pageAttributes.remove(name);
} else {
- invokingJspCtxt.removeAttribute(name, scope);
+ rootJspCtxt.removeAttribute(name, scope);
}
}
@@ -229,7 +240,7 @@ public class JspContextWrapper extends P
if (pageAttributes.get(name) != null) {
return PAGE_SCOPE;
} else {
- return invokingJspCtxt.getAttributesScope(name);
+ return rootJspCtxt.getAttributesScope(name);
}
}
@@ -239,7 +250,7 @@ public class JspContextWrapper extends P
return Collections.enumeration(pageAttributes.keySet());
}
- return invokingJspCtxt.getAttributeNamesInScope(scope);
+ return rootJspCtxt.getAttributeNamesInScope(scope);
}
@Override
@@ -249,12 +260,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
@@ -269,7 +280,7 @@ public class JspContextWrapper extends P
@Override
public ServletResponse getResponse() {
- return invokingJspCtxt.getResponse();
+ return rootJspCtxt.getResponse();
}
@Override
@@ -284,7 +295,10 @@ public class JspContextWrapper extends P
@Override
public ServletContext getServletContext() {
- return invokingJspCtxt.getServletContext();
+ if (servletContext == null) {
+ servletContext = rootJspCtxt.getServletContext();
+ }
+ return servletContext;
}
@Override
@@ -484,7 +498,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) {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org