This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push:
new de680af884 BZ 69419 - further performance improvements
de680af884 is described below
commit de680af8843f1f61311d43f54ddee772bf81315b
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Nov 4 15:43:50 2024 +0000
BZ 69419 - further performance improvements
---
.../catalina/core/ApplicationHttpRequest.java | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/java/org/apache/catalina/core/ApplicationHttpRequest.java
b/java/org/apache/catalina/core/ApplicationHttpRequest.java
index f1ceea90f4..d7ba8ea25a 100644
--- a/java/org/apache/catalina/core/ApplicationHttpRequest.java
+++ b/java/org/apache/catalina/core/ApplicationHttpRequest.java
@@ -32,7 +32,6 @@ import java.util.NoSuchElementException;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletContext;
-import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletMapping;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
@@ -190,6 +189,11 @@ class ApplicationHttpRequest extends
HttpServletRequestWrapper {
protected final Object[] specialAttributes = new Object[specials.length];
+ /*
+ * Used to speed up getAttribute(). See that method for details.
+ */
+ private ApplicationHttpRequest wrappedApplicationHttpRequest;
+
/**
* Construct a new wrapped request around the specified servlet request.
*
@@ -242,11 +246,11 @@ class ApplicationHttpRequest extends
HttpServletRequestWrapper {
* the first wrapped request that isn't an instance of
ApplicationHttpRequest before calling getAttribute()
* to avoid a call to getSpecial() for each nested
ApplicationHttpRequest.
*/
- ServletRequest wrappedRequest = getRequest();
- while (wrappedRequest instanceof ApplicationHttpRequest) {
- wrappedRequest = ((ApplicationHttpRequest)
wrappedRequest).getRequest();
+ ApplicationHttpRequest request = this;
+ while (request.wrappedApplicationHttpRequest != null) {
+ request = request.wrappedApplicationHttpRequest;
}
- return wrappedRequest.getAttribute(name);
+ return request.getRequest().getAttribute(name);
} else {
if ((specialAttributes[pos] == null) &&
(specialAttributes[SPECIALS_FIRST_FORWARD_INDEX] == null) &&
(pos >= SPECIALS_FIRST_FORWARD_INDEX)) {
@@ -669,6 +673,13 @@ class ApplicationHttpRequest extends
HttpServletRequestWrapper {
super.setRequest(request);
+ // Type specific version of the wrapped request to speed up
getAttribute()
+ if (request instanceof ApplicationHttpRequest) {
+ wrappedApplicationHttpRequest = (ApplicationHttpRequest) request;
+ } else {
+ wrappedApplicationHttpRequest = null;
+ }
+
// Initialize the attributes for this request
dispatcherType = (DispatcherType)
request.getAttribute(Globals.DISPATCHER_TYPE_ATTR);
requestDispatcherPath =
request.getAttribute(Globals.DISPATCHER_REQUEST_PATH_ATTR);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]