La réponse à vos questions dépend des exigences de votre projet. Si vous n'avez pas besoin des fonctionnalités Java EE telles que les files d'attente de messages, les transactions globales gérées par conteneur, etc., optez pour tomcat + spring.
Également par expérience, j'ai trouvé que les projets qui nécessitent beaucoup d'intégration de services Web, de planification et de files d'attente de messages sont mieux réalisés en utilisant une partie de la pile Java EE. La bonne chose est d'utiliser Spring que vous pouvez toujours intégrer aux modules Java EE exécutés dans un serveur d'applications.
Java EE 6 est très différent des versions précédentes, et cela rend vraiment tout beaucoup plus facile. Java EE 6 combine les meilleures idées de la communauté Java diversifiée - par exemple, Rod Johnson du framework Spring a été activement impliqué dans la création du Dependency Injection JSR dans Java EE 6. Un avantage de l'utilisation de Java EE 6 est que vous codez selon une norme, qui pourrait être importante dans certaines organisations pour le support des fournisseurs, etc.
GlassFish v3 prend en charge Java EE 6 et il est assez léger et démarre très rapidement. J'utilise glassfish v3 pour mes développements, et c'est vraiment facile à configurer. Il est livré avec une console d'administration très conviviale qui vous permet d'administrer graphiquement votre serveur.
Si vous utilisez GlassfishV3 et JSF 2, vous pouvez profiter des fonctionnalités CDI de Java EE 6, qui vous permettent de créer facilement des conversations (par exemple, des pages de type assistant) dans JSF.
Cela dit, l'utilisation de Java EE 6 vous oblige également à apprendre une nouvelle API. Selon la période disponible, ce n'est peut-être pas le meilleur choix pour vous. Tomcat existe depuis des lustres, et la combinaison tomcat + spring a été adoptée par de nombreux projets Web, ce qui signifie que de nombreux documents / forums sont disponibles.