Как вы обнаруживаете URL в сервлете Java при пересылке в JSP? - PullRequest
3 голосов
/ 23 июня 2009

У меня есть сервлет, который выглядит примерно так:

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

с отображением web.xml:

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

и это дает мне именно то, что я ожидаю ... Если я перейду к http://localhost:8080/example/foo, он напечатает "/ foo". Однако, если я изменю сервлет для пересылки в файл JSP:

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);
    }
}

затем, когда я проверяю значение getPathInfo (), теперь он сообщает «what.jsp» вместо «foo».

  1. Почему это изменилось до того, как оно было отправлено в JSP?
  2. Как узнать, какой URL ищет пользователь?

РЕДАКТИРОВАТЬ: На всякий случай, если это имеет значение, это на Google App Engine. Не думаю, что это все же.

Ответы [ 2 ]

14 голосов
/ 04 июля 2010

Вопрос неопределенный и неоднозначный (сервлет снова обращается к каждому форварду?), Но похоже, что вам нужно request.getAttribute("javax.servlet.forward.request_uri").

2 голосов
/ 23 июня 2009

URL-адрес, запрошенный пользователем (браузером), может быть получен из запроса:

request.getRequestURL()

В качестве альтернативы у запроса есть целая куча аксессоров для получения различных частей URL-адреса, а также для ServletRequest .

Чтобы перенаправить на другой URL, измените ответ, а не запрос:

response.sendRedirect(theURLToRedirectTo)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...