В сервлет приходит длинный multipart запрос с файлами. На запрос нужно ответить сразу (не проходит валидация). Как это сделать? Даже если делать request.getInputStream().close(), сервер все равно вычитывает весь запрос, и только потом отвечает.
Здравствуйте, javava, Вы писали:
J>В сервлет приходит длинный multipart запрос с файлами. На запрос нужно ответить сразу (не проходит валидация). Как это сделать? Даже если делать request.getInputStream().close(), сервер все равно вычитывает весь запрос, и только потом отвечает.
Ковыряние в исходниках никак не помогло?
Здравствуйте, javava, Вы писали:
B>>Ковыряние в исходниках никак не помогло? J>Помогло. Для томката нашел способ закрыть поток.
Не поделишься?
J>Хотелось бы найти универсальный способ.
Уверен что универсального нет. При желании конечно можно прошерстить спеку по сервлетам. Но я более чем уверен что это там не оговаривается.
С другой стороны почти все opensource сервера используют Tomcat. А если придется мигрировать на комерческий сервер, то за те деньги что в него будут вбуханы тех саппорт наверняка сможет подсобить с решением.
Описанный в предыдущем посте способ не всегда работает корректно. Например в нашем случае при использовании commons-fileupload (streamingAPI) при обработке запроса, вычитывании некоторого количества байт из потока, и закрытии потока описанным способом, tomcat пытался обработать запрос еще раз. Метод service вызывается еще раз для того же запроса, с уже закрытым входным потоком.
Описанную в заголовке проблему в нашем случае удалось решить закрытием потоков с клиента. Ajax-ом слушается состояние закачки (сохраняемое в сессии) и при необходимости изменяется document.location.href, при этом браузер прекращает отправку запроса.
Здравствуйте, javava, Вы писали:
J>Описанный в предыдущем посте способ не всегда работает корректно.
Ну, при подобных хаках другого ожидать не приходится.