У меня есть страница JSP с 2 формами, работающими на Tomcat 6. Одна - это форма регистрации, вторая - форма входа.
(пожалуйста, обратите внимание на контекстный путь, он убьет меня позже)
(regis_and_login.jsp)
<% String path = request.getContextPath(); %>
//regis form
<form id="regis_form" name="register_form"
action="<%= path %>/servlet/process_register" method="post">
//login form
<form name="login_form" action="<%= path %>/servlet/login" method="POST">
ЗАДАЧА
Если инструкция вставки для добавления нового пользователя не удалась, я хочу перенаправить пользователя обратно на страницу regis_and_login.jsp с отображаемой пользовательской ошибкой.
поведение сервлета
(сервлет входа)
В случае сбоя входа в систему к запросу добавляется мое пользовательское сообщение об ошибке (т. Е. request.setAttribute("error", "there is error!")
, и диспетчер переадресует обратно на страницу regis_and_login.jsp
и правильно отображает сообщение об ошибке, но так как это forward , URL изменения ОТ http://localhost:8080/regis_and_login.jsp ДО http://localhost:8080/servlet/login
(RegisterServlet)
Регистрация сервлетов работает так же. Если обнаружена какая-либо ошибка, я вызываю setAttribute () по запросу и вызываю функцию forward RequestDispatcher, чтобы перенаправить пользователя обратно на страницу regis_and_login.jsp с отображаемой пользовательской ошибкой.
ПРОБЛЕМА
Каждая форма отлично работает в отдельности, но при совместном использовании она имеет некоторые проблемы.
Заполните неверные данные для входа в форму, чтобы вы перенаправились обратно к http://localhost:8080/servlet/login с моим должным образом отображаемым моим сообщением.
На той же странице (http://localhost:8080/servlet/login), заполните регистрационную форму и отправьте.
Результат:
Теперь URL выглядит сумасшедшим.
The requested resource (/servlet/servlet/process_register) is not available.
Я думаю, это потому, что в regis_and_login.jsp
я устанавливаю contextPath и объединяю в значение действия формы: action="<%= path %>/servlet/process_register
Поэтому я считаю, что после изменения URL-адреса путем переадресации (http://localhost:8080/servlet/login), contextPath теперь установлен в "/ servlet /", и поэтому я запрашиваю /servlet/servlet/process_register
вместо просто /servlet/process_register
?
В моем уме есть несколько вариантов:
Просто используйте абсолютный путь для пути действия формы
Вместо пересылки используйте response.sendRedirect (address), чтобы избежать изменения URL-адреса (но это не позволяет мне устанавливать атрибут по запросу, поэтому я не могу отобразить сообщение об ошибке на своей странице JSP ... это против моя цель)
Должен ли я просто использовать абсолютный путь?
Пожалуйста, дайте мне знать, если вам нужно больше разъяснений ..
UPDATE
Я попросил службу поддержки удалить директивы монтирования, и теперь она принимает все входящие запросы. В web.xml и URL-адресе действия формы больше не упоминается «/ servlet», и код начал работать просто отлично. Теперь я думаю, что причина в наличии дополнительного "/ servlet", мне интересно, связано ли это с директивой mount ..