JSP: не вызывать на странице переадресации с помощью doPost requestDispatcher - PullRequest
2 голосов
/ 10 ноября 2010

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

После выбора проекта и нажатия кнопки «Отправить» вызывается сервлет для подготовки выбранного проекта и создания requestDispatcher и .forward запроса и соответствующей информации на моей главной странице.

Макет главной страницы:
Div заголовка:

<div><jsp:include page="header.do" flush="true"/></div>

Body body:

<div>   code that is present in the mainpage.jsp </div>

Div нижнего колонтитула:

<div><jsp:include page="footer.do" flush="true"/></div>

Допустим, эти 3 элемента составляют главную страницу.

После пересылки страницы с requestDispatcher я вижу содержимое главной страницы.Однако <jsp:include> не загружены (DIV оставлены пустыми).Только когда я обновляю страницу (я полагаю, doGet), включения будут загружены правильно.

Есть ли возможность разрешить загрузку включений при выполнении запроса doPostDispatch?

** Примечание. Синтаксис requestDispatchers точно такой же в doPostи doGet методы.

Если требуется дополнительное уточнение или дополнительный код.Пожалуйста, дайте мне знать.


РЕДАКТИРОВАТЬ

Используемый контейнер сервлета: Tomcat 6.0

Web.xml:

<!--- Servlet Mapping for Project Selection Servlet-->
<servlet>
    <servlet-name>ProjectSelect</servlet-name>
    <servlet-class>MyProject.Login.ProjectSelect</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ProjectSelect</servlet-name>
    <url-pattern>/ProjectSelect.do</url-pattern>
</servlet-mapping>

Но какое отношение имеет сервлетное отображение к doGet и doPost?


С уважением,

B.

1 Ответ

1 голос
/ 10 ноября 2010

Как упоминалось в комментариях, похоже, что сервлет, который прослушивает header.do и footer.do, ограничен только GET запросами.Вы должны убедиться, что он должен выполняться и для POST запросов.

Что касается нового вопроса в комментарии:

Почему вызывается метод doPost()когда <jsp:include> вызывается с другой страницы jsp?

Поскольку метод HTTP-запроса запускается учетными записями клиентов.RequestDispatcher не запускает новый HTTP-запрос или около того (это делает только sendRedirect()).RequestDispatcher просто повторно использует начальный запрос для включенных / перенаправленных ресурсов.Метод запроса не будет изменен и останется в этом случае POST во включенных / переадресованных ресурсах.


Тем не менее, вы, вероятно, хотели бы изменить или реорганизовать все ваши *.do сервлеты.к одному сервлету центрального фронтального контроллера, который имеет необходимую логику, реализованную в методе service(), чтобы избежать дублирования / беспорядочного беспорядка.Или, что еще лучше, используйте MVC-фреймворк, такой как JSF, Struts (2), Spring-MVC и т. Д. Для получения более подробной информации проверьте этот ответ .

...