KaizerSX, на реальных проектах используют как только томкат, в том числе с уродливыми url (например для внутренних приложений, которые не для клиентов, а для сотрудников), так и nginx + tomcat (тогда и в интернет не стыдно выставить).
Это вообще вопрос не к Dev, а к Ops.
Как по мне - вопрос не имеет однозначного ответа.
Постоянно приходится выбирать между магией Spring/Hibernate и утратой контроля и каким-нибудь *JDBC, но весь SQL придется писать руками.
Посмотрите в сторону mybatis/jooq.
Можно еще раз ошибку?