First product was using GWT to communicate with a special type of Servlet (GWTServlet) via XML-RPC. We definitely can substitute the back-end to use plain Servlet or JAX-RS or SpringMVC and tweak the front-end a little bit with no problem.
Second was an enterprise project utilizing IBM WebSphere Portal (JSR-286, or... if you're not familiar, take a peek at Liferay) in which we implemented 90% of it using AJAX to talk to a Portlet (like Servlet) that returns JSON.
One of the components was implemented using JAX-RS that can easily switch between XML or JSON or ATOM without having to write a single line of logic other than annotating the method to return any or all of the above format (JAX-RS uses content-negotiation).
You'll be surprised how easy it is to implement such set-up in Java. It is built with modularity in mind but you can always use SpringMVC if you'd like to have something more like Rails as well :).
I've worked on 2 large GWT apps, neither backed by Java (one was backed by C++, the other was backed by Perl). Using it to create web applications is really nice, but it's a bit bulky when it comes to some UI work (though, UIBinder helps a lot when you just want to write HTML).
Java is an overall great language. While it does have it flaws, it helps protect you from lots of stupid programming mistakes and it has pretty good performance.
GWT is definitely heavy, considering all its functionality from minifying js, js splitting to optimize page load, multiple js output for browser specific optimization and to reduce js size, generating sprites, merging css, images, etc.
The best part of GWT is the testability aspect via MVP pattern if you compare it against weiting in pure JS which is usually hard to write headless test automation.
First product was using GWT to communicate with a special type of Servlet (GWTServlet) via XML-RPC. We definitely can substitute the back-end to use plain Servlet or JAX-RS or SpringMVC and tweak the front-end a little bit with no problem.
Second was an enterprise project utilizing IBM WebSphere Portal (JSR-286, or... if you're not familiar, take a peek at Liferay) in which we implemented 90% of it using AJAX to talk to a Portlet (like Servlet) that returns JSON.
One of the components was implemented using JAX-RS that can easily switch between XML or JSON or ATOM without having to write a single line of logic other than annotating the method to return any or all of the above format (JAX-RS uses content-negotiation).
You'll be surprised how easy it is to implement such set-up in Java. It is built with modularity in mind but you can always use SpringMVC if you'd like to have something more like Rails as well :).