Nano Hash - криптовалюты, майнинг, программирование

Как предотвратить дублирование конкатенации URL-адресов после перенаправления?

Я написал страницу с именем login.jsp (tomcat6), которая имеет форму входа (имя пользователя, пароль и т. д.).

Я сопоставил действие формы и сервлет, поэтому отправка формы приводит к вызову сервлета входа в систему.

<сильный>1. В файле login.jsp есть форма, которая вызывает сервлет.

<form name="login_form" action="servlet/login" method="POST">

<сильный>2. отображение сервлета в дескрипторе развертывания (web.xml)

<servlet>
        <servlet-name>ServletLogin</servlet-name>
        <servlet-class>com.masatosan.loginservlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>ServletLogin</servlet-name>
        <url-pattern>/servlet/login</url-pattern>
</servlet-mapping>

Итак, на странице jsp, когда пользователь нажимает кнопку входа в систему, сервлет (LoginServlet.class) позаботится о входе в систему.

При сбое входа в систему из-за несовпадающего пароля и т. д. сервлет перенаправляет пользователя обратно на страницу входа.

фрагмент кода из LoginServlet.class

String address = "home.jsp"
if(hasError) {
   address = "register.jsp"
}
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);

Проблема:

Он отлично работает для первого запроса.

  1. Укажите неверные учетные данные (неверное имя пользователя или пароль) в форме входа.

  2. Для флага hasError установлено значение true, и я перенаправляюсь обратно на страницу входа (с измененным URL-адресом с localhost:8080/login.jsp на localhost:8080/servlet/login)

Я доволен до сих пор, но не после того, что следует.

  1. Укажите неверные учетные данные для входа в форму еще раз.

Результат:

Теперь я получаю HTTP 404 и URL-адрес: localhost:8080/servlet/servlet/login (с дополнительным «сервлетом»)

Решение, которое я ищу, - перенаправить на исходную страницу входа, когда я перенаправляю пользователя из-за сбоя входа. Возможно ли перенаправить на login.jsp ИЛИ не иметь лишнего текста «сервлета» в URL-адресе, который вызывает 404?

ПРИМЕЧАНИЕ. В онлайн-руководстве, которое я прочитал, упоминается, что «сервлет» не включается в сопоставление URL-адресов, как я сделал <url-pattern>/servlet/login</url-pattern>, но хост jsp, который у меня есть, заставляет меня сделать это (директива монтирования) из-за требования различать php и другие вещи. :(

ОБНОВЛЕНИЕ:

Я нашел это в сети, еще не проверял, но обновлю...

response.sendRedirect(LOGIN_PAGE);

Решение

Подход sendRedirect был не тем, что я хотел. Мне нужно было переслать запрос/ответ через диспетчер, но sendRedirect принимает только ответ в качестве аргумента.

Хитрость в исходном вопросе заключалась в том, чтобы использовать абсолютный путь в форме, как было предложено. Мое исправление, которое сработало:

(login.jsp)
<%
String path = request.getContextPath();
%>

<form name="login_form" action="<%= path %>/servlet/login" method="POST">
08.09.2010

Ответы:


1

Вы должны использовать абсолютный путь к ServletLogin в определении формы в login.jsp:

<form name="login_form" action="/servlet/login" method="POST">
08.09.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..