JSP is an obsolete technology, JSF is like a dinosaur, it is in terms of status and components. If you want to develop distributed applications with high traffic that can scale tens, hundreds, thousands of nodes, you prefer stand-alone frameworks over state-based components. Stateless frameworks can easily scale. Cabinet, Tapestry and Elevator are also reserved. There is a Click mechanism, but it has no innovation or speed. Struts was good, but now it's old, Spring mvc 3 is better than racks. Yes, Spring mvc was good, but now it's much better to play! Spring is becoming like Java EE in time; on the other hand, Play is a dead light structure with great community and documentation. This future is bright. It has many functions in the kernel (and its very light), and there are also many modules written for the game (for example, gems). In the latest release, he got websockets, dependency management, db version control, the much better scala module, ...
In particular, the new template for scala templates is dead easily, a safe type with state syntax (for example, asp.net mvc razor) with excellent performance, as you can see in the test http://www.jtict.com/blog/rails-wicket -grails-play-lift-jsp / (the game runs the fastest in the test)
You can use both java and scala with the game, but, in my opinion, scala is a better language than java, and compete with C #, Ruby, Python with the functions of the new generation (java cannot), so I prefer scala with the game . Lifting is a scala framework, but it is more complex than playing and highly competitive.
In addition, your choice of platform and language is great. As an experienced .net developer, I do not recommend asp.net webforms or asp.net mvc, I always prefer platform-independent open source technologies. Python / Django and Ruby / Rails are slow, not safe. PHP and Perl are obsolete technologies. The best platform today is jvm (.net only works on windows and mono, killed by attachmate), so you're on the right track.