Для простого веб-сайта я бы использовал Struts и Tiles и использовал бы библиотеки тегов, которые они предоставляют, чтобы JSP выглядели аккуратно и размеченными, и разделял код на Действия в Контроллере - Действие - это просто блок кода, который вызывает сервлет Struts после выполнения своей работы.
Чтобы освоить основы Struts 2 и Tiles, у вас не займет много времени, вы можете легко получить его за день.
И да, сервлеты - довольно простой уровень для написания таких систем, и в них легко получить генераторы HTML, что, как вы сказали, явно не правильно. Я думаю, вам нужно поместить больше значений в объекты запроса и сеанса, а затем отформатировать их в JSP.
Сила здесь в том, что вы можете выбрать свою инфраструктуру MVC в соответствии с масштабом вашего приложения, но при этом иметь доступ к необработанным сервлетам, если вам потребуются их для определенных действий (например, одна вещь, которую я делал в прошлом, создавала и обслуживала файл Excel из значений в базе данных).