[ https://issues.apache.org/jira/browse/WW-5450?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17871492#comment-17871492 ]
Rubens Gomes edited comment on WW-5450 at 8/7/24 12:46 AM: ----------------------------------------------------------- 1) I have 3 (three) different types of JSP folders in webapp/WEB-INF/content: * desktop * smartphone * feature (used for old basic cell phones) : no longer supported 2) I have configured a Struts Interceptor in the request pipeline. I believe this interceptor runs before the Action is invoked. 3) This interceptor looks at session to see if a device has been detected previously. If not it uses a DeviceDetector that parses HTTP headers looking for any clues which might help decipher one of the device types above. If none is found, it defaults to smartphone. 4) The interceptor in 3) then updates session if not up-to-date and makes the following call, whre DEVICE_SELECTED_KEY is "device". And since the attribute is being set on the request object it is named ""%\{#request.device}" which is what you see in the @Result annotation block. See piece of code from interceptor below: {code:java} request.setAttribute(DEVICE_SELECTED_KEY, userSession.getSelectedDevice().getType()); {code} was (Author: JIRAUSER305904): 1) I have 3 (three) different types of JSP folders in webapp/WEB-INF/content: * desktop * smartphone * feature (used for old basic cell phones) : no longer supported 2) I have configured a Struts Interceptor in the request pipeline. I believe this interceptor runs before the Action is invoked. 3) This interceptor looks at session to see if a device has been detected previously. If not it uses a DeviceDetector that parses HTTP headers looking for any clues which might help decipher one of the device types above. If none is found, it defaults to smartphone. 4) The interceptor in 3) then updates session if not up-to-date and makes the following call, whre DEVICE_SELECTED_KEY is "device". And since the attribute is being set on the request object it is named ""%\{#request.device}" which is what you see in the @Result annotation block. See piece of code from interceptor below: {code:java} request.setAttribute(DEVICE_SELECTED_KEY, userSession.getSelectedDevice().getType()); {code} > ServletDispatcherResult Forwarding GET Instead of FORWARD > --------------------------------------------------------- > > Key: WW-5450 > URL: https://issues.apache.org/jira/browse/WW-5450 > Project: Struts 2 > Issue Type: Bug > Components: Core > Affects Versions: 7.0.0 > Reporter: Rubens Gomes > Priority: Major > Fix For: 7.0.0 > > > I am running Struts "7.0.0-M9" along with Spring Boot "3.3.2" + Spring > Security with embedded tomcat version is "10.1.26" > > Environment: > Struts 2 "7.0.0-M9" > Spring Boot "3.3.2" > Tomcat "10.1.26" > Java 21 > > I have a Struts Action class annotated with : > {code:java} > @Result( > name = Action.INPUT, > location = "/WEB-INF/content/%{#request.device}/login.jsp", > type = "dispatcher" > ){code} > I have noticed that after returning from the Action class > (ViewLoginAction.java) the framework is invoking the above JSP using a > DispatcherType.GET instead of DisplatcherType.FORWARD. > StrutsRequestWrapper is missing request attribute > "jakarta.servlet.forward.request_uri" > Then, tomcat "org.apache.catalina.core.ApplicationDispatcher" doForward > method fails to find that attribute in the following line: > {code:java} > if (hrequest.getAttribute(FORWARD_REQUEST_URI) == null) > { > ... > ... > // then tomcat defaults to setting value of various request attributes > ... > ... > } > > {code} > > And after that, tomcat calls "processRequest(request, response, state);" in > the same instance "ApplicationDispatcher" and fails to resolve a FORWARD > dispatcher type below. > > Instead, it resolves a REQUEST. And when tomcat sees REQUEST dispatcher type > it does a GET on the JSP, instead of FORWARD. > > Should StrutsRequestWrapper have request attribute > "jakarta.servlet.forward.request_uri"? If not why tomcat is resolving a GET > instead of FORWARD? > > I do not see this issue with Struts 6.6.0 + Spring 2.7.18 with embedded > Tomcat "9.0.83". which is based on javax.servlet instead. > > — > Rubens Gomes > -- This message was sent by Atlassian Jira (v8.20.10#820010)