4

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
  • At the second case, are you checking the getPathInfo before or after the forward request? Or you do that in the jsp file? Commented Jun 23, 2009 at 6:14
  • I'm doing it before, where I put the comment in. (// do something here to check the value of request.getPathInfo()) Commented Jun 23, 2009 at 6:28

2 Answers 2

16

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").

Sign up to request clarification or add additional context in comments.

Comments

2

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)

3 Comments

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.
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.
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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.