URL-адреса контекста сервлета

#java #servlets #jboss5.x

#java #сервлеты #jboss5.x

Вопрос:

Я развернул war с именем test в JBoss КАК.

Когда я захожу в браузер и ввожу 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-адрес в браузере, чтобы включить в него test (теперь URL выглядит как http://localhost:8080/test/main/jsp/MFrame.jsp?sid=13045798560 ), страница успешно отображается.

Мой вопрос в том, почему контекст test не отображается в URL-адресе, поскольку это корень контекста.

Комментарии:

1. Как вы делаете перенаправление на MFrame.jsp ? Как выглядит ваш код?

Ответ №1:

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

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

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

Комментарии:

1. response.sendRedirect(request.getContextPath() "/errors/401.html");