Да, предложенное вами решение будет работать. Учитывая, что вы работаете в среде Java, хранение изображений в базе данных - лучший путь. Если вы работаете в среде с одним сервером с сервером приложений, который позволяет технически развертывать данные в разобранном формате, вы можете хранить образы на диске, но это не будет наилучшей практикой. Одним из предложений будет использование сервлета вместо JSP. Чтобы получить хорошее поведение браузера, вы хотите, чтобы браузер думал, что тип файла, который он отображает, соответствует типу файла, который он ожидает. Несмотря на существование заголовков MIME, расширение файла по-прежнему очень важно. Итак, вы хотите ссылку, которая выглядит следующим образом:
<a href="foo.jsp"><img src="imageservlet/123456789.png"></a>
Где 123456789 - это первичный ключ вашего изображения в базе данных. Ваше отображение сервлета будет выглядеть так:
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>com.example.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/imageservlet/*</url-pattern>
</servlet-mapping>
Затем в вашем сервлете просто проанализируйте URL-адрес запроса для идентификатора изображения, а не используйте строку запроса, так как строка запроса приведет в замешательство некоторые браузеры. Использование строки запроса не нарушит работу браузеров напрямую, но вы получите странное поведение в отношении кэширования, и некоторые браузеры могут сообщать о содержимом как о небезопасном.