Сбой перенаправления на сервлет - PullRequest
1 голос
/ 02 февраля 2011

У меня есть сервлет с именем EditPhotos , который, хотите верьте, хотите нет, используется для редактирования фотографий, связанных с определенным элементом веб-дизайна, который я разрабатываю. Путь URL для редактирования фотографии: [[SITEROOT]] / EditPhotos / [[ITEMNAME]] .

Когда вы идете по этому пути (GET), страница загружается нормально. Затем вы можете щелкнуть ссылку «удалить», которая размещается на той же странице, предлагая удалить фотографию. Сервлет получает эту команду удаления правильно и успешно удаляет фотографию. Затем он отправляет перенаправление обратно на первую страницу (GET).

По какой-то причине это перенаправление завершается неудачно. Я не знаю, как и почему, но, используя плагин HTTPFox для Firefox, я вижу, что запрос POST получает 0 байтов в ответ и имеет код NS_BINDING_ABORTED.

Код, который я использую для отправки перенаправления, - это тот же код, который я использовал на веб-сайте для отправки перенаправлений:

response.sendRedirect(Constants.SITE_ROOT + "EditPhotos/" + itemURL);

Я проверил окончательный URL-адрес, который отправляет перенаправление, и он определенно правильный, но браузер никогда не получает перенаправление. Почему?

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Чтение логов сервера.Вы видите IllegalStateException: response already committed с вызовом sendRedirect() в трассировке?

Если это так, то это означает, что перенаправление завершилось неудачно, поскольку заголовки ответа уже отправлены.Убедитесь, что вы не касаетесь HttpServletResponse, прежде чем вызывать sendRedirect().Перенаправление, в основном, существует из заголовка ответа Location с новым URL-адресом в качестве значения.

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

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


Обновите согласно комментариям, виновник действительно в JavaScript.Перенаправление на POST XMLHttpRequest не будет работать.Используете ли вы homegrown XMLHttpRequest функции или библиотеку вокруг него, например, как jQuery?Если jQuery, внимательно прочитайте этот вопрос .Это сводится к тому, что вам нужно вернуть определенный ответ, а затем позволить JS / jQuery самому создать новый window.location.

0 голосов
/ 02 февраля 2011

Оказывается, что это был JavaScript, который я использовал для отправки POST, что было проблемой. У меня изначально было это:

<a href="#" onClick="javascript:deletePhoto(781)">Delete</a>

И все исправилось, когда я изменил это на:

<a href="#" onClick="javascript:deletePhoto(781); return false;">Delete</a>

Функция deletePhoto:

function deletePhoto(photoID) {
    doPost(document.URL, {'action':'delete', 'id':photoID});
}

function doPost(path, params) {
    var form = document.createElement("form");
    form.setAttribute("method", "POST");
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    document.body.appendChild(form);
    form.submit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...