users@jersey.java.net

Re: [Jersey] Static references from JSP

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Mon, 01 Sep 2008 18:03:44 +0200

Hi,

I have a fix, but i am not entirely happy with it.

It appears that forwarding to a non-JSP resource does not work. Even
though i can create the dispatcher and call forward. Somewhere
internally to the Servlet implementation a 404 is returned. If anyone is
a servlet expert out there perhaps they can shed some light on this.


The fix is for the JSP template processor to write out any existing
resource other than a JSP file and dispatch/forward JSP files. Thus you
can add images etc and implicitly they will get served as well was
explicitly reference then in a Viewable, although the model makes no
sense in this respect. But ideally i would like to forward to servlet
and let it write out the resource with appropriate meta-data.


However, i think template processing is missing the ability in general
to supply HTTP meta-data and for the viewable to be processed taking
into account the template meta-data (e.g. precondition checking) before
the template is written out. I am going to jot down some ideas here so i
don't loose them:

- If an entity in the ContainerResponse implements
   ContainerResponseFilter then the filter method is executed
   before the ContainerResponse is processed to write out the HTTP
   meta-data and entity.

- Viewable is modified to implement ContainerResponseFilter and the
   filter method resolves the template and handles the meta-data.
   Resolved state is retained on the Viewable instance for writing
   out.

- TemplateProcessor.resolve is modified to take as a parameter
   request meta-data and return meta-data plus
   resolved template path. Such meta-data can be:

   - content type
   - content length
   - expires
   - last modified
   - etag

   hence static data can be differentiated from dynamic data.

Paul.

Julio Faerman wrote:
> I am using a simple <img> tag. Also tried the URL directly, should be the same.
> I would suggest adding an static image to the bookstore sample, like a
> projetct logo.
> Returning a new Viewable for the image was my first attempt, but it
> results in an exception saying it could not find the template.
>
> The exception is:
> java.io.IOException: The template name, line-chart.gif, could not be
> resolved to the path of a template
>
> The code:
> @Path("/")
> public class RootResource {
> @GET
> public Viewable getJSP(){
> return new Viewable("index.jsp",""); //This works
> }
>
> @GET
> @Path("img")
> @Produces("image/gif")
> public Viewable getImage(){
> return new Viewable("line-chart.gif",""); //This does not. Files are
> in the same directory.
> }
> }
>
>
> Thank you for the attention and congrats all, this project is awesome.
>
>
>
>
> On Mon, Sep 1, 2008 at 4:17 AM, Paul Sandoz <Paul.Sandoz_at_sun.com> wrote:
>> Hi Julio,
>>
>> Could you send me an example?
>>
>>> I am using implicit JSP Viewables (just like bookstore sample), but i
>>> don't know how can i reference a static resource (images, styles,
>>> scripts) from the page.
>>>
>> Does the following describe your problem?
>>
>> If i have a resource:
>>
>> com.foo.Foo
>>
>> and an index.jsp in:
>>
>> com/foo/Foo/index.jsp
>>
>> and there is an image at the location:
>>
>> com/foo/Foo/image.png
>>
>> how does "index.jsp" reference "image.png".
>>
>>
>>> I am trying a method that fowards to the requested resource, but
>>> servletContext.getRequestDispatcher().forward() is failling because
>>> the injected HttpServletRequest and Response are null. Is there a
>>> better way to do this?
>>>
>> If you are using Servlet you should be able to do:
>>
>> @Context HttpServletRequest req;
>>
>> @Context HttpServletRequest res;
>>
>> as fields or method parameters.
>>
>> You should be able to reference a static page using a Viewable. Just return
>> something like this:
>>
>> // Absolute reference
>> return new Viewable("/static.png", null);
>>
>> // Reference relative to the resource class or a super class
>> return new Viewable("static.png", null);
>>
>> Paul.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>

-- 
| ? + ? = To question
----------------\
    Paul Sandoz
         x38109
+33-4-76188109