Если существуют действия / условия, которые похожи по назначению или по тому, на что они действуют, их можно объединить в классы, имеющие несколько методов-обработчиков. Например, все сервлеты, которые действуют на пользователей, могут быть объединены в один класс. Имеет ли это смысл, зависит от информации, которой у нас нет.
Сколько слоев должно у вас есть? Не знаю В общем, есть как минимум один уровень обслуживания. Сервисы объединяют функциональность DAO в транзакционные единицы. Обработчики условий управляют интерфейсом между веб-и бизнес-уровнями.
Похоже, вы полностью заново изобретаете колесо, которое уже было изобретено много раз. Подумайте либо об использовании существующей платформы, либо об оптимизации существующего кода: вместо создания нескольких сервлетов для обработки условий отправьте обработчику команд как можно более далекие от спецификации сервлета.
Если вы стремитесь к офигительной простоте, то что-то вроде Фронтмен медведя - это тонкий, симпатичный слой, который избавляет от множества сложностей и шума. Что-то вроде Guice Servlets позволяет вводить зависимости без полноценного Spring / etc. стек.
Классы, которые обрабатывают определенный URL (или «команду» - см. Любую комбинацию команд документацию), не обязательно должны быть фактическими сервлетами; они могут быть общими классами.
Они могут быть сервлетами - но чем слабее связь с вашей спецификацией сервлета, тем проще будет тестировать и расширять.
Получить URL-адрес для «команды» можно так же просто, как поиск команды на карте, создание экземпляра соответствующего класса, передача различных артефактов (например, параметров запроса и сеанса) и вызов метода в реализации. , В некотором смысле, каждая структура в конечном итоге работает так на некотором уровне.