Martin created WW-5548:
--------------------------
Summary: Request attribute FORWARD_SERVLET_PATH incorrectly set by
ServletDispatcherResult breaking sitemesh integration
Key: WW-5548
URL: https://issues.apache.org/jira/browse/WW-5548
Project: Struts 2
Issue Type: Bug
Components: Dispatch Filter
Affects Versions: 7.0.0
Reporter: Martin
The servlet request parameter FORWARD_SERVLET_PATH has the following
documentation in tomcat:
{noformat}
The name of the request attribute that should be set by the container when the
forward(ServletRequest, ServletResponse) method is called. It provides the
original value of a path-related property of the request. See the chapter
"Forwarded Request Parameters" in the Servlet Specification for details.
{noformat}
Strut's org.apache.struts2.result.ServletDispatcherResult#doExecute method is
breaking this spec in a couple of ways:
# it's setting the parameter to be the path that the request is about to be
_forwarded_ to, not the _original_ path.
# it's setting the parameter itself, when that should be the responsibility of
the container (in this case, Tomcat) when forward() is invoked.
Documentation for FORWARD_SERVLET_PATH
https://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/RequestDispatcher.html#FORWARD_SERVLET_PATH
Tomcat container implementation of forward() which is responsible for setting
the parameter
https://github.com/apache/tomcat/blob/99ebd1e375297ad02846322e85d533c61077a7dc/java/org/apache/catalina/core/ApplicationDispatcher.java#L241
This is breaking integration with other tools which expect the
FORWARD_SERVLET_PATH to be set correctly, such as sitemesh (from version 3.1
onwards)
{code:xml}
<sitemesh>
....
<mapping path="/auth/*.action" decorator="/WEB-INF/decorators/main.jsp"/>
....
</sitemesh>
{code}
Sitemesh now picks up the incorrectly set FORWARD_SERVLET_PATH which in my case
is mapped to a JSP in struts.xml like so
{code:xml}
<struts>
...
<package name="authoritative links" extends="pkb-default" namespace="/auth"
strict-method-invocation="true">
<action name="dashboard" class="com.pkb.action.DashboardAction">
<result name="success">/WEB-INF/view/dashboard.jsp</result>
</action>
...
{code}
and my decorator is no longer applied, when it was previously.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)