Можно было конечно применить связку что-то вроде Angular+RESTful но нужно было хранить состояние, т.е сессия. Посему было решено писать на сервлетах.
Для этого не надо придумывать велосипед. Каноничный REST, конечно, должен быть стейлесс, но это правило можно не соблюдать. К вашим услугам какой-нибудь Spring MVC - делайте на нём REST с сохранением состояния или без сохранения. Тот же Spring MVC имеет content negotiation - в зависимости от запроса, отдавать определённый формат данных - например /users.json вернёт json, а /user.html вернёт ваш html (отрендереный на сервере). И причём для этого вам нужен всего один контроллер (+пару аннотаций).
Что-то мне кажется вам отлично подойдёт angular+rest. Объясните, какое состояние вы хотите хранить?