Отмена запроса в Tomcat - PullRequest
       26

Отмена запроса в Tomcat

2 голосов
/ 13 февраля 2012

У меня развернуто веб-приложение в Tomcat 7, и одна из транзакций загружает текстовый файл в приложение, затем приложение будет читать его построчно, а затем вставлять все записи в базу данных.

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

Продолжится ли поток, если клиент загрузит файл размером 15 МБ, на обработку которого уходит около 10 минут, а затем решит отменить его, щелкнув ссылку, указанную в качестве кнопки отмены?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

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

Когда пользователь нажимает кнопку отмены, вернитесь к Hashtable, получите поток с идентификатором и отправьте ему сообщение, чтобы остановить импорт.

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

0 голосов
/ 13 июня 2013

Я думаю, что невозможно остановить запрос, который передается на сервер.После того как вы нажмете кнопку «загрузить», вы сделаете HTTP-запрос, и процесс начнется, а затем нажмите «отменить / предоставить ссылку», это будет другой HTTP-запрос, и, поскольку HTTP не имеет состояния, он ничего не узнает о том, что произошло раньше илипрекратить.Так что, как и ожидалось, это не возможно неявно.Но для этого может быть что-то, что я не знаю сейчас.Но если вы нажмете клавишу «esc», это завершит запрос, отправленный на сервер.И поскольку до сих пор это единственное решение, в пользовательском интерфейсе вы можете написать этот код JavaScript:

$('.your_link').click(function(){
        window.stop();
    });

window.stop () не будет работать в IE.для IE вы можете использовать:

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