URL-адреса контекста сервлета - PullRequest
2 голосов
/ 05 мая 2011

Я развернул войну по имени test в JBoss AS.

Когда я захожу в браузер и набираю URL http://localhost:8080/test, я получаю страницу login.jsp, которая является страницей приветствия.

Когда я нажимаю кнопку отправки, сервлет получает вызванное имя CheckLoginServlet (onSubmit я перенаправлен на /test/servlet/CheckLoginServlet). При успешном входе в систему этот сервлет перенаправляет на jsp (MFrame.jsp), который находится внутри docroot/main/jsp. URL выглядит так http://localhost:8080/main/jsp/MFrame.jsp?sid=13045798560, и я получаю ошибку 404.

Причина в том, что URL не включает контекст test, теперь, когда я явно изменяю URL в браузере, чтобы включить в него тест (теперь URL выглядит как http://localhost:8080/test/main/jsp/MFrame.jsp?sid=13045798560), страница успешно отображается.

У меня вопрос, почему контекст test не входит в URL, поскольку он является корнем контекста.

1 Ответ

3 голосов
/ 05 мая 2011

Перенаправления являются родственниками веб-сервера. Так что если у вас есть .sendRedirect("/main/jsp/MFrame.jsp"), путь к контексту будет опущен. Это потому, что перенаправления являются понятием HTTP и происходят в браузере (они называются перенаправлениями на стороне клиента)

У вас есть несколько вариантов:

  • use forward - req.getRequestDispatcher("/main/jsp/MFrame.jsp").forward(req, res); - это вызовет перенаправление на стороне сервера, и оно будет контекстно-зависимым
  • добавить контекст к URL перенаправления (request.getContextPath())
  • использовать относительные пути в перенаправлении
...