Вы можете пройти очень длинный путь только с сервлетами и JDBC. Рассмотрим JSP, использующие JSTL, в качестве дополнительной тонкости.
Но я бы поспорил, что если ваш веб-сайт состоит из более чем одной или двух страниц, доставляющих контент базы данных в браузер, вы быстро поймете, почему веб-фреймворков так много. Встроенная навигация по страницам, логика управления, размытые слои и т. Д. Будут вызывать головные боли по мере роста вашего сайта.
Вы обнаружите, что у вас есть много похожего, повторяющегося, но немного отличающегося кода для каждого бита новой функциональности. Если вам нужно поддерживать сайт и поддерживать его работу, в конечном итоге, вы, вероятно, придете к выводу, что существуют шаблоны, готовые для захвата. Кто знает? Может быть, в результате вашего опыта вы решите, что тоже хотите попробовать себя в решении проблемы веб-фреймворка.
Что бы вы ни делали, я думаю, что наличие разных слоев является ключевым. Не надо, чтобы сервлеты делали всю работу - они для обработки HTTP-запросов. Включите работу в классы обслуживания, которые ваши сервлеты могут просто вызывать. Таким образом, вы можете использовать эту логику. Храните постоянный код в своем собственном слое и не позволяйте ему проникать в другие. Вы можете использовать повторно используемые компоненты, которые выдержат ваши первые усилия. Если вы решите переключиться на веб-фреймворк, вы просто защелкнете эти слои на свои места и начнете.
Я написал свой первый значимый веб-сайт без каких-либо фреймворков - просто прямые сервлеты, JSP и JDBC. Это дало мне лучшее понимание того, что происходит. Я думаю, что это помогает.