Когда используется контекстно-зависимый URL-адрес в действии формы (то есть URL-адрес без доменной части и без начального слеша /
), то он относится к последнему контексту текущего URL-адреса запроса.
Когда страница запрашивается http://example.com/webapp/ControllerServlet
и содержит следующее действие формы:
<form action="ControllerServlet/action">
Тогда абсолютный URL действия будет http://example.com/webapp/ControllerServlet/ControllerServlet/action
. Чтобы это исправить, необходимо убедиться, что URL-адрес действия формы правильно указан относительно URL-адреса запроса. Для страницы, которую запрашивает http://example.com/webapp/ControllerServlet/action
, существует несколько способов, в зависимости от того, как может запросить ту же страницу.
Или
<form action="action">
.. который относится к контексту last в URL-адресе запроса или
<form action="/webapp/ControllerServlet/action">
.. относительно корня домена или
<form action="../ControllerServlet/action">
.. который относится к контексту перед последним контекстом в URL (он эффективно удалит /ControllerServlet
из текущего URL-адреса запроса и добавит его снова - действительно, немного бессмысленно, но полезно, если у вас есть больше сервлетов в контексте), или
<form action="${pageContext.request.contextPath}/ControllerServlet/action">
.. относительно корня домена (полезно, если вы не хотите жестко задавать контекстный путь веб-приложения) или
<head>
<base href="${pageContext.request.contextPath}">
...
</head>
<body>
<form action="ControllerServlet/action">
...
</body>
.. который будет применяться ко всем ссылкам и формам.
Все вышеперечисленное будет указывать на http://example.com/webapp/ControllerServlet/action
.