wicket-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sven Meier <s...@meiers.net>
Subject Re: Save place to set http response status?
Date Wed, 03 Jul 2013 07:29:29 GMT
Yes, WebPageRenderer renders the page into a BufferedWebResponse. But 
after that it writes it into the response of the RequestCycle:

response.writeTo((WebResponse)requestCycle.getResponse());

That's the point of no return.

By default the RequestCycle's response is a ServletWebResponse nested in 
a HeaderBufferingWebResponse. So only headers are buffered until the 
first content is written.

ServletWebResponse#flush() just forwards to 
HttpServletResponse#flushBuffer(), no buffering involved there.

Sven


On 07/03/2013 09:19 AM, Martin Grigorov wrote:
> On Wed, Jul 3, 2013 at 10:02 AM, Sven Meier <sven@meiers.net> wrote:
>
>> HttpServletResponse has no data to push until the very end of the
>>> request cycle.
>>>
>> That's not quite right:
>> As soon as WebPageRenderer writes the buffered page into the real
>> response, Tomcat has something to flush. If it does flush (for whatever
>> reason), any additional header set
>
> Can you paste the code that does this in WebPageRenderer ?
>
> AFAIK org.apache.wicket.protocol.http.servlet.ServletWebResponse#flush()
> makes the transfer from the BufferedWebResponse to HttpServletResponse.
>
>
>> in #onEndRequest() might be ignored.
>>
>> Sven
>>
>>
>>
>> On 07/03/2013 03:52 AM, Martin Grigorov wrote:
>>
>>> Hi,
>>>
>>> org.apache.wicket.markup.html.**WebPage#configureResponse() is a good
>>> place
>>> for this.
>>>
>>> Wicket buffers the response so Tomcat cannot flush it no matter the size.
>>> I.e. the HttpServletResponse has no data to push until the very end of the
>>> request cycle.
>>>
>>>
>>> On Tue, Jul 2, 2013 at 5:07 PM, Martin Funk <mafulafunk@gmail.com> wrote:
>>>
>>>   Hi there,
>>>> what is the best place to set http response state?
>>>>
>>>> I was trying the 'onSomething' callback methods in IRequestCycleListener
>>>> Like onEndRequest
>>>>
>>>> But sometimes those get ignored
>>>>
>>>> The last save place I figured was onAfterRender in the page class, but
>>>> this
>>>> doesn't feel right.
>>>>
>>>> The reason that calls like:
>>>> ((HttpServletResponse)
>>>> RequestCycle.get().**getResponse().**getContainerResponse()).**
>>>> setStatus(404);
>>>> in the RequestCycle Listner are ignored seems to be that the underlying
>>>> container, Tomcat 6.0.37 in our case, starts to flush the outputstream as
>>>> the Response becomes big, as in maybe 20k.
>>>>
>>>> If the response is small enoug the status, can be set in the 'onDetach()'
>>>>
>>>> Anyone any ideas?
>>>>
>>>> Martin
>>>>
>>>>
>> ------------------------------**------------------------------**---------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.**apache.org<users-unsubscribe@wicket.apache.org>
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Mime
View raw message