[ 
https://issues.apache.org/jira/browse/PLUTO-530?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ate Douma resolved PLUTO-530.
-----------------------------

    Resolution: Fixed

All fixed and implemented with the recent big bang refactoring and final 
commits r753592 and r753593

> RequestDispatcher path query string parameter handling too limited and broken 
> with nested dispatches
> ----------------------------------------------------------------------------------------------------
>
>                 Key: PLUTO-530
>                 URL: https://issues.apache.org/jira/browse/PLUTO-530
>             Project: Pluto
>          Issue Type: Bug
>          Components: portlet container
>    Affects Versions: 2.0.0
>            Reporter: Ate Douma
>            Assignee: Ate Douma
>            Priority: Critical
>             Fix For: 2.0.0
>
>
> Below copied (in part) from email discussion on the Pluto dev list, see also: 
> http://www.nabble.com/More-required-Pluto-2.0-SPI-and-implementation-refactoring-issues-td21973310.html
> *** RequestDispatcher path query string parameter handling
> PLT.19.4.1 specifies that "The request dispatching mechanism is responsible 
> for aggregating query string parameters when forwarding or
> including requests".
> This requirement has been implemented very literally in Pluto: a 
> PortletRequestDispatcher path query string is "stored" in the request 
> instance and on subsequent access to the parameter map from within the 
> invoked servlet parsed and merged on top of the portlet parametermap.
> This "manual" processing and merging of query string parameters however 
> breaks the Servlet spec requirements!
> It goes wrong if from within the dispatched servlet a subsequent dispatch is 
> performed with additional query string parameters.
> In the current solution, this possible usage hasn't been taken into account, 
> with as result you'll *always* receive the same
> parametermap on subsequent (nested) dispatches (for example from within a JSP 
> including another JSP).
> But, even if the servletrequest.getRequestDispatcher(path) would be 
> overridden to "fix" this problem, that still won't solve it for two reasons:
> - ServletContext.getRequestDispatcher(path) *cannot* be overridden, therefore 
> still leaving a "hole" in the solution
> - there is no "returned from dispatch" callback mechanism to "revert" the 
> current parametermap after a dispatch
> Therefore, "manual" parsing and merging of dispatcher query string parameters 
> *cannot* be used to implement this spec requirement.
> However, the correct way to implement this is actually extremely simple: just 
> let the servlet container handle it all by itself!
> There is no need to "store", parse and merge dispatcher query string 
> parameters, and in the servletrequest(wrapper).getParameterMap(), just return 
> super.getParameterMap() which the container will have "injected" with the 
> additional query string parameters merged already.
> Jetspeed-2 has used this solution from the beginning (with some additional 
> fancy cache handling) and it just works as expected.
> Changing to this solution will dramatically simplify the current 
> implementation, especially after the PortletRequest and ServletRequest
> implementations are split up (see: PLUTO-529).
> (side note: I actually wrote a testcase for this and this spec requirement is 
> broken in most other open-source portlet containers as well!)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to