RequestDispatcher.forward() to resource under "/WEB-INF" doesn't work in WebSphere

java, requestdispatcher, servlets, web-inf, websphere

Solution

It appears that one should set `exposeWebInfOnDispatch` property to `true` in order to make WEB-INF accessible for servlets in WebSphere. I got this answer from WebSphere forum.

In WebSphere 7 administration console,

- Go to "Servers" => "Server Types" => "WebSphere application servers" on the left

- Choose proper server on the list on the main part of the page

- Click on "Container Settings" => "Web Container Settings" => "Web container"

- Go to "Custom properties" on the right

Add new property:

- Name: `exposeWebInfOnDispatch`

- Value: `true`

Problem

In one of my servlets, I invoke `RequestDispatcher.forward()` call to a static resource somewhere under WEB-INF folder: ``` request .getRequestDispatcher( "/WEB-INF/some/path/image.gif" ) .forward( request, response ); ``` Navigating to this servlet works fine under Tomcat, Jetty et al., but does not work in WebSphere 7. The error I get (both in the browser and in the server logs) is ``` Error 403: SRVE0190E: File not found: /WEB-INF/some/path/image.gif ``` Initially I assumed that WebSphere may need some specific configuration to allow internal forwarding to resources under WEB-INF, but I failed to google anything useful. Any ideas why can this happen? Thanks in advance!

Original source