users@jersey.java.net

Re: [Jersey] Static references from JSP

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

Julio Faerman wrote:
> I have tried to write out the resource, but this is troublesome as the
> resource is not on the classpath. I think there is a method to get web
> resources in servlet 2.5,

You need to use methods on the ServletContext.


> but i also think that the forward should
> work.

I cannot get it to :-( it works for JSPs, but not for "static" stuff
like HTML and images, perhaps it is bug in the GF servlet implementation
i am using?


> The viewable meta-data seems a good feature, but i think it would need
> to support a transparent and implicit mechanism to access resources.
> Perhaps using reasonable "default" meta-data.
>

Yes, now if only i could get access to the information Servlet uses for
static pages .e.g. it returns generated etags etc. Although it does not
seem to support 304 not modified correctly.

Paul.


> On Mon, Sep 1, 2008 at 1:03 PM, Paul Sandoz <Paul.Sandoz_at_sun.com> wrote:
>> 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
>>
>> ---------------------------------------------------------------------
>> 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