Per Java, puoi andare sul sicuro con Spring MVC. Spring è un'alternativa a Java EE, più veloce e semplice da usare.
Altrimenti si possono usare le varie implementazioni compatibili con JavaEE (Glassfish, JBoss, ecc...).
La cosa positiva è che se usi JavaEE stai solo usando delle API pubbliche, e puoi cambiare l'implementazione in modo trasparente. Ad esempio gli ORM si gestiscono con JPA, e una delle implementazioni è Eclipse Link. Ti fa schifo EclipseLink? No problema, nel descrittore Maven lo sostituisci con Hibernate e il tuo software diventa più veloce quasi senza cambiare nulla (solo alcune configurazioni nei datasource, 2 righe di XML).
Poi la gestione delle dipendenze viene centralizzata con Maven, che si occupa di gestire tutte le fasi di build-test-deploy in modo automatizzato. Se ti serve la libreria Pippo-3.0.jar, basta scrivere una riga di dependency nel file pom.xml (il descriptor di Maven) e ci pensa lui a scaricare la lib corretta da un repo (nexus) centrale.
Poi, hai lo unit testing facilitato tramite JUnit e se ti garba, puoi fare Aspect Oriented Programming con AspectJ.