Я знаю, что контейнер сервлетов, такой как Apache Tomcat, запускается в одном экземпляре JVM, что означает, что все его сервлеты будут работать в одном и том же процессе.
Я также знаю, что архитектура контейнера сервлета означает, что каждое веб-приложение существует в своем собственном контексте, что предполагает его изолированность от других веб-приложений.
Как изображено здесь:
![alt text](https://i.stack.imgur.com/8BGnQ.jpg)
Принимая во внимание, что каждое веб-приложение является изолированным, я ожидаю, что вы можете создать 2 копии идентичного веб-приложения, изменить имена и пути к контекстам каждого (а также любой другой соответствующей конфигурации) и запускать их параллельно без один влияет на другой. Ответы на на этот вопрос подтверждают эту точку зрения.
Однако коллега не согласен, основываясь на своем опыте попыток именно этого.
Они взяли веб-приложение и попытались запустить 2 отдельных экземпляра (с разными именами и т. Д.) В одном и том же контейнере сервлета и столкнулись с проблемами при конфликте 2 экземпляров (я не могу уточнить, поскольку я не участвовал в этом Работа).
Исходя из этого, они утверждают, что, поскольку веб-приложения выполняются в одном и том же пространстве процессов, они не могут быть изолированы, и такие вещи, как атрибуты класса, могут случайно стать общими. Этот ответ , кажется, предполагает то же самое
Кажется, что эти два взгляда не совместимы, поэтому я прошу вас:
Контейнеры сервлетов предотвращают конфликт веб-приложений, развернутых в одном и том же контейнере?
Если да , Как они это делают?
Если нет , Почему возникают помехи?
и, наконец, При каких обстоятельствах отдельные веб-приложения могут конфликтовать и создавать помехи друг другу? , возможно, сценарии, включающие ресурсы в файловой системе, собственный код или соединения с базой данных?