Диспетчеризация происходит на стороне сервера, а не на стороне клиента. Форвард в основном сообщает сервлет-контейнеру, какое представление использовать для представления результата. Его местоположение действительно не отображается в адресной строке браузера клиента. Это произойдет только тогда, когда вы используете перенаправление вместо response.sendRedirect()
. Редирект в основном говорит веб-браузеру запускать новый GET-запрос в указанном месте. При этом адресная строка браузера изменится на новый URL.
Просто скройте представление (файл JSP) в папке /WEB-INF
, чтобы конечный пользователь больше не мог получить к нему прямой доступ, и снова используйте тот же сервлет, чтобы показать форму входа через doGet()
и продолжить обработку входа Форма для отправки через doPost()
. Если вы не реализуете doGet()
, тогда будет отображаться HTTP Status 405 - метод HTTP GET не поддерживается этим URL .
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Just show form.
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Process form submit.
// ...
if (success) {
response.sendRedirect("home");
} else {
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}
}
}
Таким образом, вы можете получить страницу входа по номеру http://example.com/context/login и отправить по тому же URL.
Вы можете сделать то же самое для всех других URL-адресов одним сервлетом с помощью шаблона front controller . Это всего лишь небольшая работа, и именно поэтому существуют рамки MVC:)
Смотри также: