tags:

views:

754

answers:

3

I have a servlet that looks something like this:

public class ExampleServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.getWriter().println(request.getPathInfo());
 }
}

with a web.xml mapping like:

<servlet>
 <servlet-name>example</servlet-name>
 <servlet-class>com.example.ExampleServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>example</servlet-name>
 <url-pattern>/example/*</url-pattern>
</servlet-mapping>

and it gives me exactly what I expect... If I go to http://localhost:8080/example/foo it prints "/foo". However, if I change the servlet to forward to a JSP file:

public class ExampleServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // do something here to check the value of request.getPathInfo()
  request.getRequestDispatcher("whatever.jsp").forward(request, response);
 }
}

then when I check the value of getPathInfo() it now reports "whatever.jsp" instead of "foo".

  1. Why has this changed before it's been forwarded to the JSP?
  2. How can I detect what URL the user's looking for?

EDIT: Just in case it matters this is on Google App Engine. Don't think it should though.

+2  A: 

The URL the user (browser) requested can be accessed from the request by:

request.getRequestURL()

Alternatively the request has a whole bunch of accessors to get the various pieces of the URL as well as those on ServletRequest.

To redirect to a different URL change the response rather than the request:

response.sendRedirect(theURLToRedirectTo)
Tom
Well, I'm actually using one of those above, getPathInfo(). The docs for it say: "Returns any extra path information associated with the URL the client sent when it made this request." but that clearly isn't what's happening.
fiXedd
Why not? Was "/foo" not the extra path? or was "whatever.jsp" not the extra path. Both of these were the extra paths in your case.
Adeel Ansari
It was showing the JSP as the path, not foo. I don't see how it COULD be the JSP since I'm asking for it in the servlet, before I'm sending the forward to the JSP.
fiXedd
Show the real code snippet, please.
Adeel Ansari
A: 

Suffering same issue.. calling getRequestURL from request forwarded to JSP. I suspect appengine is relevant as I am using that too (and don't remember coming across this prob in any other container)

Andrew
A: 

The question is vague and ambiguous (is the servlet calling itself on every forward again?), but it much sounds like that you need request.getAttribute("javax.servlet.forward.request_uri").

BalusC