You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Edvin Syse <ed...@sysedata.no> on 2007/11/27 18:55:10 UTC

How to avoid Expires: 1970 header with URIRequestTargetUrlCodingStrategy

In my WicketApplication class I have mounted a URL with the URIRequestTargetUrlCodingStrategy to serve files in my virtualhosted 
CMS-application written in Wicket 1.3. The problem with this is that it returns a header like this with the file it serves up:

   HTTP/1.1 200 OK
   Expires: Thu, 01 Jan 1970 00:00:00 GMT
   Set-Cookie: JSESSIONID=1ugsnhj1evodg;Path=/
   Content-Type: image/jpeg; charset=UTF-8
   Content-Length: 55925
   Connection: keep-alive
   Server: Jetty(6.1.5)

The Expires: header obviously prevents the client from caching the result. How can I override this header?

My implementation is like this:

mount(new URIRequestTargetUrlCodingStrategy("/files") {
	@Override
	public IRequestTarget decode(RequestParameters requestParameters) {
		// TODO: Better path-checking
		final String uri = getURI(requestParameters).replaceAll("\\.\\.", "");
		/* Redirect to / if empty result, maybe return 404 instead? */
		if ("".equals(uri))
			return new RedirectRequestTarget("/");
		
		/* Get file for this instance */
		File file = new File(((TornadoWebSession) (Session.get())).getInstancePath() + File.separator + uri);
		return new ResourceStreamRequestTarget(new FileResourceStream(file));
	}
});

Sincerely,
Edvin Syse

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


Re: How to avoid Expires: 1970 header with URIRequestTargetUrlCodingStrategy

Posted by Edvin Syse <ed...@sysedata.no>.
> No you don't have to hve the servlet response for that
> Just check if the Response is a WebResponse
> That already has the setHeader methods

Thank you so much, it worked perfectly :)

-- Edvin

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


Re: How to avoid Expires: 1970 header with URIRequestTargetUrlCodingStrategy

Posted by Johan Compagner <jc...@gmail.com>.
No you don't have to hve the servlet response for that
Just check if the Response is a WebResponse
That already has the setHeader methods

On Nov 27, 2007 9:13 PM, Edvin Syse <ed...@sysedata.no> wrote:

> > hmm this way i have never seen it before :)
>
> Hehe.. I know it might be a bit unconventional, but I think I have a good
> reason for it. Since the application is "virtualhosted", the
> session holds a path to the "filearchive" for the current instance (set
> based on the http host of the request), and the /files url of the
> site should serve up the files in the current site's filearchive.
>
> > then overwrite the ResourceStreamRequestTargets:
> > *
> >
> > protected* *void* configure(*final* RequestCycle requestCycle,
> > *final*Response response,
> > *final* IResourceStream resourceStream)
> > and set some headers in the response and call super.
>
> To do that I think I need to get to the HttpServletResponse, right? How
> can I retrieve that from the Response object? It seems to be of type
> org.apache.wicket.protocol.http.BufferedWebResponse.
>
> -- Edvin
>
> ---------------------------------------------------------------------
>  To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: How to avoid Expires: 1970 header with URIRequestTargetUrlCodingStrategy

Posted by Edvin Syse <ed...@sysedata.no>.
> hmm this way i have never seen it before :)

Hehe.. I know it might be a bit unconventional, but I think I have a good reason for it. Since the application is "virtualhosted", the 
session holds a path to the "filearchive" for the current instance (set based on the http host of the request), and the /files url of the 
site should serve up the files in the current site's filearchive.

> then overwrite the ResourceStreamRequestTargets:
> *
> 
> protected* *void* configure(*final* RequestCycle requestCycle,
> *final*Response response,
> *final* IResourceStream resourceStream)
> and set some headers in the response and call super.

To do that I think I need to get to the HttpServletResponse, right? How can I retrieve that from the Response object? It seems to be of type 
org.apache.wicket.protocol.http.BufferedWebResponse.

-- Edvin

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


Re: How to avoid Expires: 1970 header with URIRequestTargetUrlCodingStrategy

Posted by Johan Compagner <jc...@gmail.com>.
hmm this way i have never seen it before :)

But you could also do this with a mounted shared resource
But what you could do if you want to do it that way

then overwrite the ResourceStreamRequestTargets:
*

protected* *void* configure(*final* RequestCycle requestCycle,
*final*Response response,
*final* IResourceStream resourceStream)
and set some headers in the response and call super.

johan



On Nov 27, 2007 6:55 PM, Edvin Syse <ed...@sysedata.no> wrote:

> In my WicketApplication class I have mounted a URL with the
> URIRequestTargetUrlCodingStrategy to serve files in my virtualhosted
> CMS-application written in Wicket 1.3. The problem with this is that it
> returns a header like this with the file it serves up:
>
>   HTTP/1.1 200 OK
>   Expires: Thu, 01 Jan 1970 00:00:00 GMT
>   Set-Cookie: JSESSIONID=1ugsnhj1evodg;Path=/
>   Content-Type: image/jpeg; charset=UTF-8
>   Content-Length: 55925
>   Connection: keep-alive
>   Server: Jetty(6.1.5)
>
> The Expires: header obviously prevents the client from caching the result.
> How can I override this header?
>
> My implementation is like this:
>
> mount(new URIRequestTargetUrlCodingStrategy("/files") {
>        @Override
>        public IRequestTarget decode(RequestParameters requestParameters) {
>                // TODO: Better path-checking
>                final String uri =
> getURI(requestParameters).replaceAll("\\.\\.", "");
>                /* Redirect to / if empty result, maybe return 404 instead?
> */
>                if ("".equals(uri))
>                        return new RedirectRequestTarget("/");
>
>                /* Get file for this instance */
>                File file = new File(((TornadoWebSession) (Session.get())).getInstancePath()
> + File.separator + uri);
>                return new ResourceStreamRequestTarget(new
> FileResourceStream(file));
>        }
> });
>
> Sincerely,
> Edvin Syse
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>