This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
You can't tell reliably whether a client gets a response over TCP/IP and HTTP. When you send a response it goes into a buffer, from which it gets broken up into packets which are sent individually to the client and reconstructed into the response there.
In your old system you were only catching the case where the client disconnected before you flushed the output stream. There is still plenty of time after that for the client to disconnect, and you weren't catching those cases. If you need transactional reliability then TCP/IP and HTTP aren't the right tools.