сохраняйте и храните картинке на диске, а не в БД, иначе потеряете на отдаче. А отдавайте через либо default-сервлет, который специально для сервировки статики и сделан (проставляет правильные заголовки и т.п.), а еще лучше через проксирующий http-сервер (apache, ngnix, lighthttpd).
Думаю, файлы нужно хранить на файловой системе, а не в базе данных. В базе данных нужно хранить путь к файлам, а уж потом разбираться в зависимости от прав доступа выдавать путь к файлу или нет. Хотя если только юзерпики, то можно и в базе данных. Понятное дело, что выбор решения зависит от обьёмов данных которые вы собираетесь сохранять.
Ну если у вас совсем много файлов, то тогда сбрасывайте их в специальные сервисы типа aws.amazon.com/s3/ или GAE (там API еще есть для манипулирования картинками)