Проблема, о которой вы говорите, не ограничивается файлами JSP (которые переводятся в классы).Работа веб-контейнера заключается в обеспечении того, чтобы различные веб-приложения внутри контейнера не мешали друг другу.И каждое приложение МОЖЕТ иметь файлы классов с одинаковым пакетом и одинаковым именем.Лучший пример: у каждого Webapp есть некоторая общая библиотека, такая как log4j, но с разными версиями.
Решение состоит в том, чтобы использовать Java ClassLoader
очень креативным способом.Класс известен только загрузчику классов, который его загрузил, и всем дочерним загрузчикам классов (загрузчик классов образует древовидную иерархию).По сути, веб-контейнер открывает новый загрузчик классов для каждого веб-приложения, каждый загрузчик классов может загружать один и тот же класс - Bingo.
Примечание. Если все сделано правильно, это работает довольно хорошо.Но если экземпляры этих классов «просачиваются» в другое приложение, происходят странные вещи ... В этом случае не редкость сообщение типа
ClassCastException....instance of class xyz.Foo is not an instance of class xyz.Foo
.В первый раз вы увидите, что поцарапаете голову.