Это не зависит от tomcat, но в целом, если вы разделяете веб-приложение, вам нужно каким-то образом разделять различные состояния по распределенным частям. Вы можете сделать это с базой данных или хранилищем memcached для информации о сеансе, но убедитесь, что каждое приложение может читать общие данные сеанса (некоторые платформы будут использовать ключ для шифрования данных сеанса, и для всех будет необходим один и тот же ключ для чтения Это). Я не думаю, что большинство хранилищ cookie для информации о сеансе будут хэшироваться таким образом, что cookie не будут правильно сохраняться между приложениями.
Разбивка по функциям имеет смысл. Посмотрите, где вы можете отделить свой внутренний код. Если у вас есть хорошие URL-адреса типа restful, вы, вероятно, можете посмотреть свои URL-адреса, чтобы определить правильные разделы.
Кроме того, если у вас есть большой статический раздел, который вы обновляете отдельно, возможно, он должен обслуживаться чем-то иным, чем tomcat.
Для обычных классов вы можете поместить реализации классов в jar в вашей папке tomcat / lib. Они будут доступны для всего сервера. Они не смогут быть адаптированы очень хорошо к вашему веб-контексту (если вы не передали им контекст), и вам придется перезапустить весь сервер, чтобы обновить файл jar, чтобы tomcat перезагрузил его.
Возможно, вы сможете что-то придумать с интерфейсами, которые обеспечат вам большую независимость в каждом разделе, позволяя им каким-то образом компилироваться независимо. Возможно, некоторый вызов удаленного метода также поможет вам переместить обычные функции в один файл .jar или .war.