Как я могу изменить URL? - PullRequest
0 голосов
/ 13 апреля 2010

В настоящее время я работаю над большим веб-приложением для компании, и у нас около 4 месяцев, но у нас есть безвредная (но раздражающая) проблема, которую мы только что оставили, потому что у нас не было времени ее изменить.

Способ, которым мы настраиваем наш MVC, оставляет нас с сервлетом, штабелируемым один за другим бесконечное количество раз на URL, поэтому, если бы у нас был сервлет с именем «ControllerServlet», и я что-то сделал на веб-сайте, я получил бы результат такие как это в первый раз.

WebsiteXXXXXXX.com / XXX / ControllerServlet XXXX

И в следующий раз, когда я должен был что-то сделать, все будет работать нормально, но URL будет складывать путь ControllerServlet следующим образом ...

WebsiteXXXXXXX.com / XXX / ControllerServlet / ControllerServlet / ХХХХ

WebsiteXXXXXXX.com / XXX / ControllerServlet / ControllerServlet / ControllerServlet / XXXX

и так далее ...

Хотя он работает отлично, что-то явно не так.

Я полагаю, это легко исправить, но на самом деле может помочь кто-то.

Большое спасибо

1 Ответ

1 голос
/ 14 апреля 2010

Когда используется контекстно-зависимый 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...