[ 
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:40 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 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 "%\{#attr.device}".  See code 
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)

Reply via email to