Hi, Habr! Help me choose a web framework? Requirements: fashionable, youth, popular, high-quality framework for solo techno-nomad.
Do we need to read the next post about it every month?
A few years of participation in projects on the border of the enterprise and the system have finally beaten off the scent. To understand the question, I looked at the top of Google and found there a bunch of one-sided ratings. Probably the best was Java Web Frameworks Index from ZeroTurnaround.
Good he is that
Here is how the rating looks at the time of this writing:
Rank | Framework | Popularity |
---|---|---|
one | Spring MVC | 28.82 |
2 | Jsf | 15.2 |
3 | Spring boot | 13.35 |
four | Gwt | 7.74 |
five | Grails | 6.35 |
6 | Struts | 5.4 |
7 | Dropwizard | 4.9 |
eight | Play framework | 3.26 |
9 | Jhipster | 2.49 |
ten | JAX-RS | 2.44 |
eleven | Vaadin | 2.15 |
12 | Seam | 1.94 |
13 | Wicket | 1.91 |
14 | Tapestry | 1.9 |
15 | Sparkjava | 0.77 |
sixteen | Vert.x | 0.76 |
17 | Rapidoid | 0.25 |
18 | Lagom | 0.24 |
nineteen | Ratpack | 0.13 |
Wait, there Struts in the top ten? Seriously? It seems I have not lost anything in these few years. More precisely, even since the early Middle Ages.
Let's go through the list.
Oh, Spring MVC and Spring Boot are two different list items? Perhaps this can be understood and forgive? ( write in the comments! ). It makes no sense to ask, what does Spring have to do - he, like Docker, always has it.
By the way, Jurgen Heller is meeting with us at the JPoint 2018 Moscow - this is the main sprinkler. Here you can dryuit questions such as "what's the spring here" in full.
But what is really scary is that between them (that is, in fact, in the first place) is JSF. Once I did some discussions on ENT about what template engine for Java is the best. The years went by, but there was always half the thread with a universal answer: why do you need a template engine when there is a JSF? Initially, there was just JSP / JSTL, but then they slowly lost ground, and only JSF remained.
, JSF. , FacesContext facesContext = FacesContext.getCurrentInstance();
. @Inject FacesContext facesContext;
. EL-, #facesContext
. @FlowMap
@ManagedProperty ("#{bean.property}") private String stringProperty;
, , . <f:convertDateTime type="localDate" pattern="MM/dd/yyyy"/>
— Date-Time API, , . . , Oracle , .
— <f:websocket>
, :
<h:body>
<f:websocket channel="jaxArticle"
onmessage="function(message){alert(message)"} />
</h:body>
, 2009 ( «XV ») .
— Grails PlayFramework. Grails — , , Java, JVM. C PlayFramework Java API Play 1, — ? PlayFramework , Scala API ( ORM ).
Grails. , . , , Groovy — . Java 9! , , . Groovy - Java 9: , --add-opens=java.base/*
.
Wicket, Vaadin GWT . Vaadin GWT . Wicket . , Wicket , Java-. Wicket . MMO-. , — , , Wicket. , Wicket . , ?
Wicket , AJAX. , AJAX , , -. , Wicket . , , . , , . — , . wicket.apache.org , .
AJAX : 2017 . , , : m
, mp
, e
, f
, sc
, dt
, wr
, ch
, bh
, pre
, bsh
, ah
, sh
, fh
, coh
, ep
, dep
, rt
, ad
, sp
, tr
.
. : «allow default». , , HTML, .
, , GWT. , - , : JavaScript Java — , - .
Wicket, , 2007 2010 , , GitHub — Martin Grigorov, .
, .
git clone https://github.com/apache/wicket.git
cd ./wicket
:
git log --shortstat --pretty="%cE" | sed 's/\(.*\)@.*/\1/' | grep -v "^$" | awk 'BEGIN { line=""; } !/^ / { if (line=="" || !match(line, $0)) {line = $0 "," line }} /^ / { print line " # " $0; line=""}' | sort | sed -E 's/# //;s/ files? changed,//;s/([0-9]+) ([0-9]+ deletion)/\1 0 insertions\(+\), \2/;s/\(\+\)$/\(\+\), 0 deletions\(-\)/;s/insertions?\(\+\), //;s/ deletions?\(-\)//' | awk 'BEGIN {name=""; files=0; insertions=0; deletions=0;} {if ($1 != name && name != "") { print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net"; files=0; insertions=0; deletions=0; name=$1; } name=$1; files+=$2; insertions+=$3; deletions+=$4} END {print name ": " files " files changed, " insertions " insertions(+), " deletions " deletions(-), " insertions-deletions " net";}'
:
sudo gem install git_fame
git fame
30 ( SSD, i7).
Statistics based on master
Active files: 5,407
Active lines: 578,441
Total commits: 15,600
name | loc | commits | files | distribution (%) |
---|---|---|---|---|
martin-g | 161,089 | 98 | 2,898 | 27.8 / 0.6 / 53.6 |
Igor Vaynberg | 67,983 | 2,872 | 1,993 | 11.8 / 18.4 / 36.9 |
Juegen Donnerstag | 66,234 | 1,867 | 2,250 | 11.5 / 12.0 / 41.6 |
andrea del bene | 58,583 | 5 | 654 | 10.1 / 0.0 / 12.1 |
Eelco Hillenius | 30,287 | 2,932 | 1,051 | 5.2 / 18.8 / 19.4 |
svenmeier | 28,504 | 307 | 1,130 | 4.9 / 2.0 / 20.9 |
Martijn Dashorst | 22,470 | 1,089 | 727 | 3.9 / 7.0 / 13.4 |
Frank Bille Jensen | 19,854 | 235 | 1,403 | 3.4 / 1.5 / 25.9 |
Johan Compagner | 17,637 | 1,484 | 1,503 | 3.0 / 9.5 / 27.8 |
Jonathan Locke | 14,257 | 1,321 | 437 | 2.5 / 8.5 / 8.1 |
Jean-Baptiste Quenot | 14,022 | 277 | 448 | 2.4 / 1.8 / 8.3 |
Gerolf Seitz | 13,189 | 205 | 1,041 | 2.3 / 1.3 / 19.3 |
Matej Knopp | 8,565 | 963 | 291 | 1.5 / 6.2 / 5.4 |
Peter Ertl | 8,281 | 354 | 417 | 1.4 / 2.3 / 7.7 |
Pedro Henrique Oliveira d... | 7,474 | 98 | 169 | 1.3 / 0.6 / 3.1 |
Tobias Soloschenko | 6,373 | 100 | 161 | 1.1 / 0.6 / 3.0 |
Emond Papegaaij | 4,624 | 168 | 207 | 0.8 / 1.1 / 3.8 |
Alastair Maw | 3,257 | 422 | 172 | 0.6 / 2.7 / 3.2 |
Carl-Eric Menzel | 2,338 | 36 | 112 | 0.4 / 0.2 / 2.1 |
Jesse Long | 2,230 | 12 | 261 | 0.4 / 0.1 / 4.8 |
Jeremy Ryan Thomerson | 2,146 | 51 | 84 | 0.4 / 0.3 / 1.6 |
Andrea Del Bene | 1,999 | 46 | 450 | 0.3 / 0.3 / 8.3 |
bitstorm | 1,972 | 14 | 116 | 0.3 / 0.1 / 2.1 |
Michael Mosmann | 1,397 | 43 | 31 | 0.2 / 0.3 / 0.6 |
Felipe Campos de Almeida | 1,396 | 4 | 24 | 0.2 / 0.0 / 0.4 |
klopfdreh | 1,329 | 39 | 27 | 0.2 / 0.2 / 0.5 |
Janne Hietamaki | 996 | 218 | 46 | 0.2 / 1.4 / 0.9 |
Timo Heikki Rantalaiho | 883 | 42 | 105 | 0.2 / 0.3 / 1.9 |
Maurice Marrink | 784 | 12 | 28 | 0.1 / 0.1 / 0.5 |
Bertrand Guay-Paquet | 773 | 1 | 3 | 0.1 / 0.0 / 0.1 |
John Sarman | 767 | 8 | 21 | 0.1 / 0.1 / 0.4 |
Maxim Solodovnik | 716 | 26 | 38 | 0.1 / 0.2 / 0.7 |
sourceforge-skipoles | 605 | 40 | 42 | 0.1 / 0.3 / 0.8 |
manuelbarzi | 476 | 2 | 5 | 0.1 / 0.0 / 0.1 |
Domas Poliakas | 432 | 9 | 9 | 0.1 / 0.1 / 0.2 |
Alexander Morozov | 412 | 4 | 16 | 0.1 / 0.0 / 0.3 |
Thomas Götz | 403 | 1 | 13 | 0.1 / 0.0 / 0.2 |
Martin Funk | 313 | 3 | 20 | 0.1 / 0.0 / 0.4 |
Gwyn Richard Evans | 249 | 62 | 67 | 0.0 / 0.4 / 1.2 |
admin | 247 | 3 | 13 | 0.0 / 0.0 / 0.2 |
kensakurai | 208 | 5 | 3 | 0.0 / 0.0 / 0.1 |
Michael Haitz | 207 | 1 | 2 | 0.0 / 0.0 / 0.0 |
Guillaume Smet | 204 | 3 | 7 | 0.0 / 0.0 / 0.1 |
Cedric Gatay | 185 | 9 | 13 | 0.0 / 0.1 / 0.2 |
Thomas Matthijs | 185 | 3 | 12 | 0.0 / 0.0 / 0.2 |
Roman Grigoriadi | 169 | 1 | 12 | 0.0 / 0.0 / 0.2 |
Artur Michałowski | 156 | 4 | 6 | 0.0 / 0.0 / 0.1 |
Martin Grigorov (Netwalk) | 149 | 4 | 12 | 0.0 / 0.0 / 0.2 |
Robert Gruendler | 127 | 6 | 8 | 0.0 / 0.0 / 0.1 |
Matthias Metzger | 122 | 5 | 2 | 0.0 / 0.0 / 0.0 |
René Dieckmann | 119 | 1 | 3 | 0.0 / 0.0 / 0.1 |
Ate Douma | 114 | 14 | 15 | 0.0 / 0.1 / 0.3 |
Pedro Santos | 110 | 2 | 4 | 0.0 / 0.0 / 0.1 |
Sebastien Briquet | 110 | 3 | 3 | 0.0 / 0.0 / 0.1 |
Manuel Barzi | 105 | 5 | 6 | 0.0 / 0.0 / 0.1 |
jac-czerwinski | 94 | 4 | 4 | 0.0 / 0.0 / 0.1 |
Sven | 82 | 1 | 8 | 0.0 / 0.0 / 0.1 |
ozeray | 79 | 1 | 11 | 0.0 / 0.0 / 0.2 |
Thomas Heigl | 75 | 1 | 4 | 0.0 / 0.0 / 0.1 |
Sebastien | 71 | 2 | 4 | 0.0 / 0.0 / 0.1 |
Fridolin Jackstadt | 42 | 2 | 6 | 0.0 / 0.0 / 0.1 |
meno | 37 | 3 | 8 | 0.0 / 0.0 / 0.1 |
Thibault Kruse | 33 | 2 | 2 | 0.0 / 0.0 / 0.0 |
Vit Rozkovec | 24 | 1 | 1 | 0.0 / 0.0 / 0.0 |
Tim Fleming | 16 | 2 | 5 | 0.0 / 0.0 / 0.1 |
Luke Niesink | 13 | 2 | 4 | 0.0 / 0.0 / 0.1 |
Jan Blok | 10 | 8 | 1 | 0.0 / 0.1 / 0.0 |
Nils Schmidt | 9 | 1 | 1 | 0.0 / 0.0 / 0.0 |
Nick Pratt | 9 | 1 | 2 | 0.0 / 0.0 / 0.0 |
slowery | 8 | 1 | 2 | 0.0 / 0.0 / 0.0 |
astrapi69 | 4 | 5 | 2 | 0.0 / 0.0 / 0.0 |
Jezza | 3 | 1 | 1 | 0.0 / 0.0 / 0.0 |
tatjana19 | 3 | 1 | 1 | 0.0 / 0.0 / 0.0 |
robert mcguinness | 3 | 1 | 1 | 0.0 / 0.0 / 0.0 |
Peter Dave Hello | 3 | 1 | 1 | 0.0 / 0.0 / 0.0 |
barney2k7 | 2 | 1 | 2 | 0.0 / 0.0 / 0.0 |
bsaad | 1 | 1 | 1 | 0.0 / 0.0 / 0.0 |
Sander Evers | 1 | 1 | 1 | 0.0 / 0.0 / 0.0 |
Yoann Rodière | 1 | 1 | 1 | 0.0 / 0.0 / 0.0 |
Jeremy Thomerson | 1 | 4 | 1 | 0.0 / 0.0 / 0.0 |
Peter Lamby | 1 | 3 | 1 | 0.0 / 0.0 / 0.0 |
Dan Retzlaff | 0 | 2 | 0 | 0.0 / 0.0 / 0.0 |
Jared Renzullo | 0 | 1 | 0 | 0.0 / 0.0 / 0.0 |
Joe Schaefer | 0 | 1 | 0 | 0.0 / 0.0 / 0.0 |
Leonid Bogdanov | 0 | 3 | 0 | 0.0 / 0.0 / 0.0 |
Yoshiki Higo | 0 | 1 | 0 | 0.0 / 0.0 / 0.0 |
cvs2svn | 0 | 1 | 0 | 0.0 / 0.0 / 0.0 |
, , Wicket, , . - ( ), — .
, - .
, « ». « , — , — Spring, , HashMap! !» , , , . , - !
, , . , JavaScript- , Java . Senior Framework Coder ( — Spring Boot, JSF Play), , . , , Spring Boot.
, -. ?
. , ! -? : , , , , - , Vert.x.
UPD: - Wicket , JBreak . , — :-)
Source: https://habr.com/ru/post/345036/
All Articles