You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2005/01/25 19:53:17 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet JspServlet.java
luehe 2005/01/25 10:53:17
Modified: jasper2/src/share/org/apache/jasper/servlet JspServlet.java
Log:
Fix for Bugzilla 33223 ("pageContext.forward and <jsp:include> result
in StringIndexOutOfBoundsException")
All JSP TCKs still pass, and the test case in the bug report now also passes.
Revision Changes Path
1.40 +48 -52 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServlet.java
Index: JspServlet.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServlet.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- JspServlet.java 23 Sep 2004 06:59:09 -0000 1.39
+++ JspServlet.java 25 Jan 2005 18:53:17 -0000 1.40
@@ -181,67 +181,63 @@
public void service (HttpServletRequest request,
HttpServletResponse response)
- throws ServletException, IOException {
+ throws ServletException, IOException {
- try {
- String includeUri
- = (String) request.getAttribute(Constants.INC_SERVLET_PATH);
- String requestUri
- = (String) request.getAttribute(Constants.INC_REQUEST_URI);
-
- String jspUri;
-
- // When jsp-property-group/url-matching is used, and when the
- // jsp is not defined with <servlet-name>, the url
- // as to be passed as it is to the JSP container (since
- // Catalina doesn't know anything about the requested JSP
-
- // The first scenario occurs when the jsp is not directly under /
- // example: /utf16/foo.jsp
- if (requestUri != null){
- String currentIncludedUri
- = requestUri.substring(requestUri.indexOf(includeUri));
+ String jspUri = null;
- if ( !includeUri.equals(currentIncludedUri) ) {
- includeUri = currentIncludedUri;
+ String jspFile = (String) request.getAttribute(Constants.JSP_FILE);
+ if (jspFile != null) {
+ // JSP is specified via <jsp-file> in <servlet> declaration
+ jspUri = jspFile;
+ } else {
+ /*
+ * Check to see if the requested JSP has been the target of a
+ * RequestDispatcher.include()
+ */
+ jspUri = (String) request.getAttribute(Constants.INC_SERVLET_PATH);
+ if (jspUri != null) {
+ /*
+ * Requested JSP has been target of
+ * RequestDispatcher.include(). Its path is assembled from the
+ * relevant javax.servlet.include.* request attributes
+ */
+ String pathInfo = (String) request.getAttribute(
+ "javax.servlet.include.path_info");
+ if (pathInfo != null) {
+ jspUri += pathInfo;
}
- }
-
- // The second scenario is when the includeUri is null but it
- // is still possible to recreate the request.
- if (includeUri == null) {
+ } else {
+ /*
+ * Requested JSP has not been the target of a
+ * RequestDispatcher.include(). Reconstruct its path from the
+ * request's getServletPath() and getPathInfo()
+ */
jspUri = request.getServletPath();
- if (request.getPathInfo() != null) {
- jspUri = request.getServletPath() + request.getPathInfo();
+ String pathInfo = request.getPathInfo();
+ if (pathInfo != null) {
+ jspUri += pathInfo;
}
- } else {
- jspUri = includeUri;
- }
-
- String jspFile = (String) request.getAttribute(Constants.JSP_FILE);
- if (jspFile != null) {
- jspUri = jspFile;
}
+ }
- boolean precompile = preCompile(request);
-
- if (log.isDebugEnabled()) {
- log.debug("JspEngine --> " + jspUri);
- log.debug("\t ServletPath: " + request.getServletPath());
- log.debug("\t PathInfo: " + request.getPathInfo());
- log.debug("\t RealPath: " + context.getRealPath(jspUri));
- log.debug("\t RequestURI: " + request.getRequestURI());
- log.debug("\t QueryString: " + request.getQueryString());
- log.debug("\t Request Params: ");
- Enumeration e = request.getParameterNames();
-
- while (e.hasMoreElements()) {
- String name = (String) e.nextElement();
- log.debug("\t\t " + name + " = "
- + request.getParameter(name));
- }
+ if (log.isDebugEnabled()) {
+ log.debug("JspEngine --> " + jspUri);
+ log.debug("\t ServletPath: " + request.getServletPath());
+ log.debug("\t PathInfo: " + request.getPathInfo());
+ log.debug("\t RealPath: " + context.getRealPath(jspUri));
+ log.debug("\t RequestURI: " + request.getRequestURI());
+ log.debug("\t QueryString: " + request.getQueryString());
+ log.debug("\t Request Params: ");
+ Enumeration e = request.getParameterNames();
+ while (e.hasMoreElements()) {
+ String name = (String) e.nextElement();
+ log.debug("\t\t " + name + " = "
+ + request.getParameter(name));
}
+ }
+ try {
+ boolean precompile = preCompile(request);
serviceJspFile(request, response, jspUri, null, precompile);
} catch (RuntimeException e) {
throw e;
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org