David David - 7 months ago 28
Java Question

ServletContext getResource not working

I'm trying to use

ServletContext.getResource
to retrieve a
java.net.url
reference to an image file (which I will then include in a PDF library using iText).

When I use
ServletContext.getRealPath("picture.jpg")
, I get back a string URL. However, getResource always returns
null
.

Example 1:

String picture = ServletContext.getRealPath("picture.jpg");
// picture contains a non-null String with the correct path
URL pictureURL = ServletContext.getResource(picture);
// pictureURL is always null


Example 2:

URL pictureURL = ServletContext.getResource("picture.jpg");
// pictureURL is always null


So what is the correct way to build a java.net.URL object pointing to a file in my
webapps/
folder? Why does
getRealPath
work but not
getResource
?

In case it helps at all, here is my folder structure

webapps -> mySite -> picture.jpg


Does my picture need to be stored in either
WEB-INF
or
WEB-INF/classes
to be read by
getResource
?

Answer

Returns a URL to the resource that is mapped to a specified path. The path must begin with a "/" and is interpreted as relative to the current context root.

So you must provide the context-relative full path. For example:

URL pictureURL = servletContext.getResource("/images/picture.jpg");

(note the lower-cased servletContext variable)