Как насчет:
>>> string_1 = "(555).555-5555"
>>> string_2 = "(555) 555 - 5555 ext. 5555"
>>> any(c.isalpha() for c in string_1)
False
>>> any(c.isalpha() for c in string_2)
True
Есть ли способ обнаружить это без записи каких-либо данных?
blockquote>Нет, потому что в TCP / IP нет способа обнаружить это без записи каких-либо данных.
Не беспокойтесь об этом. Просто выполните действия запроса и напишите ответ. Если клиент исчез, это вызовет IOException: сброс соединения, который будет выброшен в контейнер сервлетов. Ничего вам не нужно делать.
Вы пытались сбросить буфер ответа: response.flushBuffer (); Кажется, что вы выбрали исключение IOException, когда клиент отключился.
Мне нужно на самом деле обнаружить, когда клиент отключается, потому что у меня есть некоторая очистка, которую я должен выполнить в этой точке (ресурсы для выпуска и т. д.).
blockquote>Для блока
finally
. Он будет выполнен независимо от результата. Например,OutputStream output = null; try { output = response.getOutputStream(); // ... output.flush(); // ... } finally { // Do your cleanup here. }
Если у меня есть доступ к HttpServletRequest, будет пытаться прочитать из этого запроса исключение IOException, если клиент отключится?
blockquote>Зависит от того, как вы читаете, и сколько тела запроса уже находится в памяти сервера. В случае обычных запросов, закодированных в форме, всякий раз, когда вы вызываете
getParameter()
заранее, он обычно будет полностью разбираться и храниться в памяти сервера. ВызовgetInputStream()
не будет полезен вообще. Лучше сделайте это вместо ответа.