Точно. Каждый HTTP-запрос уже является отдельным потоком. Имейте в виду, что веб-контейнер создаст только один экземпляр сервлета за время существования приложения и что код сервлета распределяется между всеми запросами. Это подразумевает, что любые переменные уровня класса или статические переменные будут совместно использоваться всеми запросами. Если у вас есть такая переменная, она не поточно-безопасная. Вам необходимо объявить специфичные для запроса переменные threadlocal на уровне метода.
Что касается JDBC: просто напишите твердый код, и все должно идти хорошо. Использование пула соединений полезно только для повышения производительности соединения (что действительно стоит усилий, поверьте мне, подключение БД - довольно дорогая задача, которая может занимать не менее 200 мс или даже больше, при этом повторное использование соединения из затрат пула почти ничего). Это только ничего не меняет в безопасности потока написанного вами кода, оно все еще в ваших руках. Чтобы получить четкое представление о том, как правильно выполнять базовое кодирование JDBC, вы можете найти эту статью полезной.