Jboss и TomCat. Как это работает?
JBoss — это реализация спецификации JavaEE (контейнер для EAR- и WAR-приложений).
Tomcat — это частичная реализация JavaEE в той её части, которая включает Web-приложения (контейнер для WAR).

Один другого дополняет. Для работы всего этого нужен JavaSE JDK — Oracle JDK или OpenJDK6 или 7 — в зависимости от требований развёртывания.

В WAR-приложениях сервлеты компилируются заранее Java-компилятором в байткод *.class-файлов и созданием архива с *.class-файлами и ресурсами (*.war). JSP-страницы из *.war компилируются «на лету» в сервлеты при первом запросе. Во время первого запроса со стороны пользователей контейнер сервлетов (Tomcat) преобразует JSP-страницы (если они присутствуют) в сервлеты, компилируя с помощью Java-компилятора из JDK в байткод. JVM контейнера осуществляет JIT-компиляцию байткода сервлетов в нативный код и кэширование нативного кода в оперативной памяти для обработки последующих запросов пользователей.

В EAR-приложениях контейнер (JBoss) производит похожую работу совестно с JVM по JIT-компиляции бинов (файлы *.class в *.ear) и кэшировании нативного кода в оперативной памяти для последующего многократного выполнения.

Метаинформация, записанная в файлах *.war и *.ear, нужна для правильного развёртывания, «параметризации» значений свойств сервлетов и бинов, частичным управлением жизненным циклом приложений.
Аналогия неверна тем, что Java-машина является аналогом CLR.NET, а не ASP.NET
Аналог ASP.NET в данной связке — это как раз-таки Tomcat. 

JBoss в базовом случае совершенно не нужен. JBoss — это реализация JavaEE (да, что-то вроде библиотеки). Ближайший аналог из мира .NET — Castle (общих у них две вещи: они оба обожают xml-файлы настроек и включают в себя столько функционала, что никто в мире никогда не использовал весь одновременно).