Не очень понятно из сообщения: так получается что in.read не вычитывает? После 33 секунд нулевую длину возвращает всё время в цикле? Сдаётся мне, ещё как минимум надо флушить поток после write, тем более что в BufferedOutputStream обёрнуто.
Эм… трафика между БД и сервлетом или между сервлетом и клиентом? Или чего вообще? Что вообще такое «передача различных структур»? Уточните задачу. Способов реализации вашей схемы по меньшей мере сотня. Может, имеется ввиду просто работа с БД через веб-интерфейс?