The big exception is Play! Framework but that seems to have mainly shifted over to the Scala side of things.
The big exception is Play! Framework but that seems to have mainly shifted over to the Scala side of things.
Dude, Play 2.x is perfectly fine for Java and will always support both languages.
I also hated Play 1.x because it relied on its own half-baked build system, making it hard to import Maven modules and because the templates were written in Groovy, which for me was a big turn-off, because I like the JVM for its potential for performance and using such a slow dynamic language for its templating was a big no-no (Groovy may have gotten better in the meantime, I don't really know). It also relied on many runtime hacks and bytecode generation, things that have been moved at compile time in Play2 with the help of its SBT integration.
There's many things to like about its preference for the Scala way of doing things. Don't let that stand in the way, as otherwise it's a nice framework.
Last year Groovy 2 was released which provides a @CompileStatic annotation which directs the compiler to statically compile the tagged code which runs faster. Not many people seem to be using it though, e.g. Grails and Gradle only use dynamically compiled Groovy code (afaik). And it's still quite buggy, e.g. just yesterday this serious bug was reported: http://groovy.329449.n5.nabble.com/BUG-in-CompileStatic-mode...
And regarding editing XML in some other required places - you can use Gradle instead of Maven or Ant (thus no XML files). But that's not the point, to get rid of all XML on your server. The point is that in the application code you are not obliged to use XML.
So to answers your question: you don't hear about Stripes because Stripes is bad at marketing. Just look at their website - it looks like its from the 90s. A small bit of CSS work is probably the best thing Stripes could do to increase user base.
get(new Route("/") {
@Override
public Object handle(Request request, Response response) {
Integer age = request.queryMap("user").get("age").integerValue();
//do stuff
}
});
is cleaner and easier to read than this (JAX-RS): @GET @Path("/")
public Response get(@QueryParam("user[age]") Integer age) {
//do stuff
}
It gets far worse if you think about what it takes to marshall a JSON response in spark...