-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Michael,
On 6/19/14, 10:54 AM, Michael van Rooyen wrote:
>
> On 2014/06/19 04:48 PM, Michael van Rooyen wrote:
>>
>> On 2014/06/19 04:20 PM, Christopher Schultz wrote:
>>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
>>>
>>> Michael,
>>>
>>> On 6/19/14, 9:43 AM, Michael van Rooyen wrote:
>>>> We've been running Tomcat 6.0.36 without issues for many
>>>> months. Our pages have many components and are constructed
>>>> using getRequestDispacher("...").include(request, response)
>>>> to pull the components in.
>>>>
>>>> For the past few weeks, we've had a few instances where, in
>>>> constructing a page, the parameters in the query string
>>>> passed to getRequestDispatcher(), are not being passed
>>>> through to the components included.
>>>>
>>>> For example, if a browser submits the request
>>>> /main.jsp?id=foo, then from that page, we include
>>>> /product.jsp?id=bar, the product.jsp page should see the
>>>> following parameters:
>>>>
>>>> id = [ bar, foo ]
>>>>
>>>> This happens almost all the time, but sporadically, we're
>>>> getting just:
>>>>
>>>> id = [ foo ] instead.
>>>>
>>>> If the entry page was /main.jsp?cat=foobar, for example, then
>>>> on including /product.jsp?id=bar, we should get:
>>>>
>>>> id = [ bar ], cat = [ foobar ]
>>>>
>>>> But instead, we sometimes get just:
>>>>
>>>> cat = [ foobar ]
>>>>
>>>> Here is an extract from our logs. The first is just before
>>>> the call the getRequestDispatcher().include(), and shows the
>>>> URI.
>>>>
>>>> 19 Jun 2014 2:58:04 PM
>>>> org.apache.catalina.core.ApplicationContext log INFO: Trace @
>>>> 2014-06-19 14:58:04.808 [system: TP-Processor7]
>>>> /full/include/view/generic/smallfeature.jsp?id=25951215082928&cached=true
>>>>
>>>>
>>>>
>>>
>>>>
web.Session$Site.include(Session.java:58)
>>>>
>>>> And then the smallfeature.jsp logs the contents of the
>>>> parameterMap directly thereafter:
>>>>
>>>> 19 Jun 2014 2:58:04 PM
>>>> org.apache.catalina.core.ApplicationContext log INFO: Trace @
>>>> 2014-06-19 14:58:04.81
>>>> [993BE7ADFD65B94F2A62E85B64B3B8A2/null: TP-Processor7]
>>>> Parameters: cat = lcu; page = browse;
>>>> web.tags.Log.doStartTag(Log.java:48)
>>>>
>>>>
>>>> You can see the id and cached parameters are missing, and
>>>> the parameters that are available are actually those from the
>>>> main page. Has anyone experienced this before, or know what
>>>> may cause it?
>>> I think there is a hole in the spec, here, because Servlet Spec
>>> 3.0, section 9.1.1 states:
>>>
>>> " Parameters specified in the query string used to create the
>>> RequestDispatcher take precedence over other parameters of the
>>> same name passed to the included servlet. The parameters
>>> associated with a RequestDispatcher are scoped to apply only
>>> for the duration of the include or forward call. "
>>>
>>> The term "take precedence" could be interpreted as "overriding
>>> completely" (Tomcat's implementation) or "appending" (your
>>> expectation), and I think I would agree with the current
>>> implementation Tomcat appears to have: the "id" parameter in
>>> your included query string completely replaces the "id"
>>> parameter that came from the original request.
>>>
>>> Short of a clarification of the Servlet spec, you are going to
>>> have to do something else in order to fix this problem. Might I
>>> recommend the use of a request /attribute/ instead of a query
>>> string parameter to pass information from one resource to
>>> another for inclusion?
>> Thanks for the info Chris. The problem is that tomcat is not
>> behaving consistently - from what I see, Tomcat doesn't "override
>> completely", rather, it "appends". But sometimes, sporadically,
>> it "ignores", and when it does ignore, it breaks our site.
>>
>> If you compare the two logs I listed earlier (the "ignore"
>> scenario), to two below (normal scenario), you see the parameters
>> being appended. I'm not sure if there is something weird about
>> our code that causes the "append" behaviour, but for now I'm
>> assuming that this is Tomcat's normal behaviour.
>>
>> Normal behaviour: just before the call to
>> getRequestDispatcher().include(), we log the URI:
>>
>> 19 Jun 2014 4:30:16 PM
>> org.apache.catalina.core.ApplicationContext log INFO: Trace @
>> 2014-06-19 16:30:16.96 [system: TP-Processor24]
>> /full/include/view/book/detail.jsp?id=2691420082928&cached=false
>> web.Session$Site.include(Session.java:58)
>>
>> Right thereafter, detail.jsp logs the actual parameters
>> received:
>>
>> 19 Jun 2014 4:30:16 PM
>> org.apache.catalina.core.ApplicationContext log INFO: Trace @
>> 2014-06-19 16:30:16.961 [97A547EA5879F643AA717483B7165A39/null:
>> TP-Processor24] Parameters: id = [ 2691420082928, bdgc-269-g050
>> ]; cached = false; page = detail;
>> web.tags.Log.doStartTag(Log.java:48)
>>
>> Here, you see that the parameters from the include
>> (id=2691420082928 and cached=false) are being prepended to the
>> parameters on the original request (id=bdgc-269-g050 and page =
>> detail). Both ids are in the array, with the included one as
>> element 0. This is when things are working normally. In the
>> "ignore" scenario, the second log would be:
>>
>> Parameters: id = [ bdgc-269-g050 ]; cached = false;
>>
>> In other words, the parameters from the URL passed to include(),
>> are ignored completely...
>>
>> Thanks, Michael.
>>
> Sorry, a typo in the "ignore" parameters above, the line should
> read:
>
> Parameters: id = [ bdgc-269-g050 ]; page = detail;
>
> And not
>
> Parameters: id = [ bdgc-269-g050 ]; cached = false;
>
> Since the cached parameter is part of the included query string,
> which is ignored.
Can you provide the URI of the original page (details.jsp) as well as
the URI that is being used to include the sub-request? You aren't
providing both in your examples. Also, I have no idea how you are
logging, so I can't be sure you haven't broken the logging code somehow.
Can you provide the code you are using for logging the parameters
received by the JSP in the sub-request?
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iQIcBAEBCAAGBQJTowM9AAoJEBzwKT+lPKRYtmQP/3pbc8S6gg1R91gksLTtXLhP
kz+Um0R7Me4S4jcM1RfHLWK2FRBx6xNQ2vVdcg34LV/RMLd5yQdhmywsbL7O1sFZ
u02mLK4TlaDLq9QcTJ3GSzbUju8zRbEtkRp+KRvNdKCxSafloFP6vC14QMS7O3c8
g9PJ/+wG6fdllFSyfe7KvVLdrGijSyNkCke111IB+JrECXtAlERXAZIbLop0J4De
nxrqb0pGRVRrq13Vf1jn4ZxS61QSP8PTpENqCDEktMS2wAiIJ7v8ZgDj/1RR99Qj
dIXiuvvOe7jaWzsAHuWxYLNlt+U1xLCNmkaqQFp+IuXDgy/FjPG8iLPggZtTFOdH
cAos1DJwFtdtgZzjkYvvllEcoe7irkoGll9AdmaGY/b9vL3svk5DD83mD2UbBtW6
m8auJDYJIgbaCwTzT4z1h+HK9Gy3uArPPaPqI+0ZIXvEg95TfJew/kPnQrQ0tLf2
WKLSMvLPAqvyBRttjO/QD6R+zeQ+LXwSPld/sGu1HjZRfj2fIThbCKmDk42/ajwc
1PeqZDk3lrYCT7mQGjX4bP57XXfJ11RbL0aTqsSiTfMO27MXw7oLfj/WP167xQEU
7aEThIpZ0HaSiYZc47xYb+bfbeuxyrKFa6kxnjXmSucANn8CsPydZPRir6XmTgiA
8oTgY7To/EjuBVzZ4DYP
=GWxy
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]