SlideShare una empresa de Scribd logo
1 de 60
Comparing Java
Web Frameworks
JSF, Spring MVC, Stripes, Struts 2,
       Tapestry and Wicket

           Matt Raible
    matt@raibledesigns.com
    http://raibledesigns.com




                                      1
Today's Agenda
Introductions
Pros and Cons
Smackdown
Conclusion
Q and A




                        2
Introductions
Your experience with webapps?
Your experience with Java EE?
What do you want to get from this session?
Experience with Maven, Tomcat, Hibernate, Spring?
Web Framework Experience:
   Spring MVC, Struts 2, Stripes, JSF, Tapestry,
   Wicket




                                                    3
Matt
       4
Raible
         5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
My Experience
Struts 1: used since June 2001 - same time 1.0 was
released.
Spring MVC: used since January 2004 - before 1.0
was released.
Struts 2: used since July 2004.
Tapestry: used since July 2004.
JSF: used since July 2004 - both Sun’s RI and
MyFaces.
Stripes and Wicket: used since April 2007.


                                                     21
Pros and Cons




                22
JSF
Pros:
   Java EE Standard - lots of demand and jobs
   Fast and easy to develop with initially
   Lots of component libraries
Cons:
   Tag soup for JSPs
   Doesn't play well with REST or Security
   No single source for implementation


                                                23
Spring MVC
Pros:
    Lifecyle for overriding binding, validation, etc.
    Integrates with many view options seamlessly: JSP/
    JSTL, Tiles, Velocity, FreeMarker, Excel, XSL, PDF
    Inversion of Control makes it easy to test
Cons:
    Configuration intensive - lots of XML
    Almost too flexible - no common parent Controller
    No built-in Ajax support


                                                         24
Stripes
Pros:
   No XML - Convention over Configuration
   Good documentation (easy to learn)
   Enthusiastic community
Cons:
   Small Community
   Not as actively developed as other projects
   Hard-coded URLs in ActionBeans


                                                 25
Struts 2
Pros:
   Simple architecture - easy to extend
   Tag Library is easy to customize with
   FreeMarker or Velocity
   Controller-based or page-based navigation
Cons:
   Documentation is poorly organized
   Too much concentration on new features
   Googling results in Struts 1.x documentation


                                                  26
Tapestry
Pros:
   Very productive once you learn it
   Templates are HTML - great for designers
   Lots of innovation between releases
Cons:
   Documentation very conceptual, rather than
   pragmatic
   Steep learning curve
   Long release cycles - major upgrades every year


                                                     27
Wicket
Pros:
   Great for Java developers, not web developers
   Tight binding between pages and views
   Active community - support from the creators
Cons:
   HTML templates live next to Java code
   Need to have a good grasp of OO
   The Wicket Way - everything done in Java


                                                   28
The Smackdown



                29
Evaluation Criteria
Ajax Support: Is it built-in and easy to use?
Bookmark-ability: Can users bookmark pages and
return to them easily?
Validation: How easy is it to use and does it support
client-side (JavaScript) validation?
Testability: How easy is it to test Controllers out of
container?




                                                         30
Evaluation Criteria, cont.
 Post and Redirect: How does the framework handle
 the duplicate post problem?
 Internationalization: How is i18n supported and
 how easy is it to get messages in Controllers?
 Page Decoration: What sort of page decoration/
 composition mechanisms does the framework
 support?
 Community and Support: Can you get questions
 answered quickly (and respectfully)?


                                                    31
Evaluation Criteria, cont.
 Tools: Is there good tool (particularly IDE) support
 for the framework?
 Marketability of Skills: If you learn the framework,
 will it help you get a job?
 Job Count: What is the demand for framework skills
 on dice.com and indeed.com?




                                                        32
Ajax Support
Is Ajax support built-in and easy to use?
    JSF: No Ajax support, use ICEfaces and Ajax4JSF
    Stripes: No libraries, supports streaming results
    Struts 2: Dojo built-in, plugins for GWT, JSON
    Spring MVC: No libraries, use DWR & Spring
    MVC Extras
    Tapestry: Dojo built-in in 4.1
    Wicket: Dojo and Script.aculo.us (Wicket Stuff)



                                                        33
Bookmarking and URLs
JSF does a POST for everything - URLs not even
considered
Stripes uses conventions, but you can override
Struts 2 has namespaces - makes it easy
Spring MVC allows full URL control
Tapestry still has somewhat ugly URLs
Wicket allows pages/URLs to be mounted



                                                 34
Validation
JSF has ugly default messages, but easiest to configure
Spring MVC allows you to use Commons Validator - a
mature solution
Struts 2 uses OGNL for powerful expressions - client-side
only works when specifying rules on Actions
Tapestry has very robust validation - good messages without
need to customize
Stripes and Wicket do validation in Java - no client-side




                                                              35
Testability
Spring and Struts 2 allow easy testing with mocks
(e.g. EasyMock, jMock, Spring Mocks)
Tapestry appears difficult to test because page
classes are abstract, Creator class simplifies
JSF page classes can be easily tested and actually
look a lot like Struts 2 actions
Wicket has WicketTester, a powerful solution
Stripes has Servlet API Mocks and MockRoundtrip



                                                     36
Post and Redirect
The duplicate-post problem, what is it?
Easiest way to solve: redirect after POST
Is there support for allowing success messages to live through
a redirect?
    Spring MVC allows you to add parameters to a redirect
    Stripes, Tapestry and Wicket all have quot;flashquot; support
    Struts 2 requires a custom solution
    JSF requires a custom solution, i18n messages difficult to
    get in page beans



                                                                 37
Internationalization
JSTL’s <fmt:message> tag makes it easy
No standard for getting i18n messages in controller
classes
Stripes, Spring MVC and JSF use a single ResourceBundle
per locale
Struts 2, Tapestry and Wicket advocate separate files for
each page/action
JSF requires resource bundle to be declared on each page
Tapestry's <span key=quot;key.namequot;> is awesome


                                                           38
Page Decoration
Tiles Experience: used since it first came out
SiteMesh is much easier to setup and use
Tiles can be used in Struts 2, Spring and JSF
    Requires configuration for each page
SiteMesh can be used with all frameworks
    Requires very little maintenance after setup
SiteMesh not supported or recommended for use
with JSF, Tapestry or Wicket


                                                   39
Tools
Spring has Spring IDE - only does XML validation,
not a UI/web tool
Struts 2 has EclipseWork
Tapestry has Spindle - great for coders
JSF has many, and they're getting better and better
Stripes and Wicket don't have any official tools
NetBeans has support for: Struts *, JSF (+Facelets),
Tapestry and Wicket (no Stripes or Spring MVC)


                                                       40
Tools Available
                                     Struts 2
15.00
                                     Spring MVC
                                     Stripes
                                     Wicket
11.25                       12
                                     JSF
                                     Tapestry
 7.50
                                 7


 3.75    4
             3        3


   0
                 May 2007




                                                  41
Marketability of Skills
Struts 1 is still in high-demand and widely-used
Spring is getting more press, but mostly due to the
framework’s other features
JSF is quickly becoming popular
Struts 2 is gaining ground, but very scarce on job
boards
Tapestry has increased in popularity in last couple
years
Wicket and Stripes are virtually unknown


                                                      42
Dice Job Count
                                          Struts 2
600
                                          Spring MVC
                         574
                                          Stripes
                                          JSF
450                                       Wicket
                                          Tapestry

300


                                    190
150

            68
      52
 0                             10
                 6
                 May 3, 2006



                                                       43
Dice Job Count w/ Struts
                                                       Struts 2
2,500
                                                       Spring MVC
                                                       Stripes
                                                       JSF
                                               2,063
1,875                                                  Wicket
                                                       Tapestry
                                                       Struts 1
1,250



 625
                          574


                                         190
   0         68
        52                          10
                  6
                      May 3, 2006



                                                                    44
Job Trends




             45
Employer Search on Monster.com
Resumes posted 4/3 - 5/3/2007
      900                                   Struts 2
                                896
                                            Spring MVC
                                            Stripes
      720
                                            Wicket
                                            JSF
      540
                                            Tapestry
      360

      180
                                      108
                 87
            55
       0              16   16




                                                         46
Mailing List Traffic
  Struts

 Stripes

MyFaces

Tapestry

 Wicket

             0                 500                1,000               1,500               2,000
   * Spring MVC is not listed here because they have a forum instead of a mailing list and I couldn’t
   figure out a way to count the number of messages for each month.




                                                                                                        47
Mailing List Traffic
  GWT

  Struts

 Stripes

MyFaces

Tapestry

 Wicket

             0                 625                1,250               1,875               2,500
   * Spring MVC is not listed here because they have a forum instead of a mailing list and I couldn’t
   figure out a way to count the number of messages for each month.




                                                                                                        48
Releases in 2007
5.00                           Struts 2
           5
                               Spring MVC
                               Stripes
3.75                           MyFaces
                               Wicket
                               Tapestry
       3
2.50

                   2   2

1.25
               1           1


  0




                                            49
Books on Amazon
15.00                              Struts 2
                                   Spring MVC
                                   Stripes
11.25                              JSF
                     11
                                   Wicket
                                   Tapestry
 7.50
            7


 3.75
        3                      3

                           1
   0
                May 2007


                                                50
Which would I choose?



                        51
What do others think?
                                      Struts 2
 25.00
                                      Struts 1
                                      Spring MVC
                                      JSF
 18.75
                                      Tapestry
 12.50


  6.25


    0
         AppFuse Usage - March 2007



                                                   52
Resources
Download this presentation
     http://static.raibledesigns.com/repository/presentations
Struts - http://struts.apache.org
     StrutsTestCase: http://strutstestcase.sf.net
Spring MVC - http://www.springframework.org
     Spring IDE: http://www.springide.org
     Gaijin Studio: http://gaijin-studio.sf.net
Struts 2 - http://opensymphony.org/webwork
     Eclipse Plugin: http://sf.net/projects/eclipsework
     IDEA Plugin: http://wiki.opensymphony.com/display/WW/
     IDEA+Plugin


                                                                53
Resources, cont.
Tapestry - http://tapestry.apache.org
    Spindle: http://spindle.sourceforge.net
JSF - http://java.sun.com/j2ee/javaserverfaces and http://
myfaces.apache.org
    Java Studio Creator: http://sun.com/software/products/
    jscreator
    MyEclipse: http://myeclipseide.com
IDEA: http://www.jetbrains.com/idea
SiteMesh: http://opensymphony.com/sitemesh



                                                             54
Resources, cont.
Testing Frameworks
    JUnit: http://junit.org
    EasyMock: http://easymock.org
    jMock: http://jmock.org
    jWebUnit: http://jwebunit.sourceforge.net
    Canoo WebTest: http://webtest.canoo.com
    Tapestry Test Assist: http://howardlewisship.com/blog/
    2004/05/tapestry-test-assist.html
AppFuse - http://appfuse.org



                                                             55
Books
Starting Struts 2, Ian Roughly (free on InfoQ.com)
The Spring Primer, Matt Raible
Pro Spring, Rob Harrop and Jan Machacek
Spring in Action, Craig Walls and Ryan Breidenbach
Professional Java Development with Spring, Rod
Johnson, Juergen Hoeller and Team




                                                     56
Books, cont.
WebWork in Action, Patrick Lightbody and Team
Tapestry 101, Warner Onstine
Tapestry in Action, Howard Lewis Ship
Core JSF, David Geary and Cay Horstmann
JSF in Action, Kito Mann
Pro Wicket, Karthik Gurumurthy




                                                57
GWT
Grails          Seam
 Flex
          What’s Next?
                            Trails
            Ruby on Rails
 Django


          OpenLaszlo
                                     58
Who cares?

quot;If it works, use it!quot;


                         59
Questions?
matt@raibledesigns.com
http://raibledesigns.com




                           60

Más contenido relacionado

Similar a Os Raible

Comparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket
Comparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and WicketComparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket
Comparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and WicketMatt Raible
 
Comparing JVM Web Frameworks - Devoxx 2010
Comparing JVM Web Frameworks - Devoxx 2010Comparing JVM Web Frameworks - Devoxx 2010
Comparing JVM Web Frameworks - Devoxx 2010Matt Raible
 
Comparing Flex, Grails, GWT, Seam, Struts 2 and Wicket
Comparing Flex, Grails, GWT, Seam, Struts 2 and WicketComparing Flex, Grails, GWT, Seam, Struts 2 and Wicket
Comparing Flex, Grails, GWT, Seam, Struts 2 and WicketMatt Raible
 
Comparative Analysis of Bootstrap and UIkit framework
Comparative Analysis of Bootstrap and UIkit frameworkComparative Analysis of Bootstrap and UIkit framework
Comparative Analysis of Bootstrap and UIkit frameworkIRJET Journal
 
Struts 2-overview2
Struts 2-overview2Struts 2-overview2
Struts 2-overview2Long Nguyen
 
Struts 2-overview2
Struts 2-overview2Struts 2-overview2
Struts 2-overview2divzi1913
 
JavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right ChoiceJavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right ChoiceDmitry Sheiko
 
Struts 2 Overview
Struts 2 OverviewStruts 2 Overview
Struts 2 Overviewskill-guru
 
Modern Java Web Development
Modern Java Web DevelopmentModern Java Web Development
Modern Java Web Developmentzenyk
 
A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)Markus Günther
 
When Should You Consider Meta Architectures
When Should You Consider Meta ArchitecturesWhen Should You Consider Meta Architectures
When Should You Consider Meta ArchitecturesDaniel Cukier
 
When Should You Consider Meta Architectures
When Should You Consider Meta ArchitecturesWhen Should You Consider Meta Architectures
When Should You Consider Meta Architecturesccsl-usp
 
Java in the age of containers - JUG Frankfurt/M
Java in the age of containers - JUG Frankfurt/MJava in the age of containers - JUG Frankfurt/M
Java in the age of containers - JUG Frankfurt/MMarkus Eisele
 
01 introduction to struts2
01 introduction to struts201 introduction to struts2
01 introduction to struts2Smita B Kumar
 

Similar a Os Raible (20)

Comparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket
Comparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and WicketComparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket
Comparing JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket
 
Comparing JVM Web Frameworks - Devoxx 2010
Comparing JVM Web Frameworks - Devoxx 2010Comparing JVM Web Frameworks - Devoxx 2010
Comparing JVM Web Frameworks - Devoxx 2010
 
Comparing Flex, Grails, GWT, Seam, Struts 2 and Wicket
Comparing Flex, Grails, GWT, Seam, Struts 2 and WicketComparing Flex, Grails, GWT, Seam, Struts 2 and Wicket
Comparing Flex, Grails, GWT, Seam, Struts 2 and Wicket
 
Comparative Analysis of Bootstrap and UIkit framework
Comparative Analysis of Bootstrap and UIkit frameworkComparative Analysis of Bootstrap and UIkit framework
Comparative Analysis of Bootstrap and UIkit framework
 
Jsf 2.0 Overview
Jsf 2.0 OverviewJsf 2.0 Overview
Jsf 2.0 Overview
 
Struts2
Struts2Struts2
Struts2
 
Struts2
Struts2Struts2
Struts2
 
Struts 2-overview2
Struts 2-overview2Struts 2-overview2
Struts 2-overview2
 
Struts 2-overview2
Struts 2-overview2Struts 2-overview2
Struts 2-overview2
 
JavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right ChoiceJavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right Choice
 
Struts 2 Overview
Struts 2 OverviewStruts 2 Overview
Struts 2 Overview
 
Modern Java Web Development
Modern Java Web DevelopmentModern Java Web Development
Modern Java Web Development
 
A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)A Journey through the JDKs (Java 9 to Java 11)
A Journey through the JDKs (Java 9 to Java 11)
 
When Should You Consider Meta Architectures
When Should You Consider Meta ArchitecturesWhen Should You Consider Meta Architectures
When Should You Consider Meta Architectures
 
When Should You Consider Meta Architectures
When Should You Consider Meta ArchitecturesWhen Should You Consider Meta Architectures
When Should You Consider Meta Architectures
 
Java in the age of containers - JUG Frankfurt/M
Java in the age of containers - JUG Frankfurt/MJava in the age of containers - JUG Frankfurt/M
Java in the age of containers - JUG Frankfurt/M
 
Struts2 tutorial
Struts2 tutorialStruts2 tutorial
Struts2 tutorial
 
Struts2 tutorial
Struts2 tutorialStruts2 tutorial
Struts2 tutorial
 
01 introduction to struts2
01 introduction to struts201 introduction to struts2
01 introduction to struts2
 
What Is a GUID?
What Is a GUID?What Is a GUID?
What Is a GUID?
 

Más de oscon2007

J Ruby Whirlwind Tour
J Ruby Whirlwind TourJ Ruby Whirlwind Tour
J Ruby Whirlwind Touroscon2007
 
Solr Presentation5
Solr Presentation5Solr Presentation5
Solr Presentation5oscon2007
 
Os Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman WiifmOs Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman Wiifmoscon2007
 
Performance Whack A Mole
Performance Whack A MolePerformance Whack A Mole
Performance Whack A Moleoscon2007
 
Os Lanphier Brashears
Os Lanphier BrashearsOs Lanphier Brashears
Os Lanphier Brashearsoscon2007
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swposcon2007
 
Os Berlin Dispelling Myths
Os Berlin Dispelling MythsOs Berlin Dispelling Myths
Os Berlin Dispelling Mythsoscon2007
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdatedoscon2007
 
Adventures In Copyright Reform
Adventures In Copyright ReformAdventures In Copyright Reform
Adventures In Copyright Reformoscon2007
 
Railsconf2007
Railsconf2007Railsconf2007
Railsconf2007oscon2007
 

Más de oscon2007 (20)

J Ruby Whirlwind Tour
J Ruby Whirlwind TourJ Ruby Whirlwind Tour
J Ruby Whirlwind Tour
 
Solr Presentation5
Solr Presentation5Solr Presentation5
Solr Presentation5
 
Os Borger
Os BorgerOs Borger
Os Borger
 
Os Harkins
Os HarkinsOs Harkins
Os Harkins
 
Os Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman WiifmOs Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman Wiifm
 
Os Bunce
Os BunceOs Bunce
Os Bunce
 
Yuicss R7
Yuicss R7Yuicss R7
Yuicss R7
 
Performance Whack A Mole
Performance Whack A MolePerformance Whack A Mole
Performance Whack A Mole
 
Os Fogel
Os FogelOs Fogel
Os Fogel
 
Os Lanphier Brashears
Os Lanphier BrashearsOs Lanphier Brashears
Os Lanphier Brashears
 
Os Tucker
Os TuckerOs Tucker
Os Tucker
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swp
 
Os Furlong
Os FurlongOs Furlong
Os Furlong
 
Os Berlin Dispelling Myths
Os Berlin Dispelling MythsOs Berlin Dispelling Myths
Os Berlin Dispelling Myths
 
Os Kimsal
Os KimsalOs Kimsal
Os Kimsal
 
Os Pruett
Os PruettOs Pruett
Os Pruett
 
Os Alrubaie
Os AlrubaieOs Alrubaie
Os Alrubaie
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdated
 
Adventures In Copyright Reform
Adventures In Copyright ReformAdventures In Copyright Reform
Adventures In Copyright Reform
 
Railsconf2007
Railsconf2007Railsconf2007
Railsconf2007
 

Último

Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 

Último (20)

Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 

Os Raible

  • 1. Comparing Java Web Frameworks JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket Matt Raible matt@raibledesigns.com http://raibledesigns.com 1
  • 2. Today's Agenda Introductions Pros and Cons Smackdown Conclusion Q and A 2
  • 3. Introductions Your experience with webapps? Your experience with Java EE? What do you want to get from this session? Experience with Maven, Tomcat, Hibernate, Spring? Web Framework Experience: Spring MVC, Struts 2, Stripes, JSF, Tapestry, Wicket 3
  • 4. Matt 4
  • 6. 6
  • 7. 7
  • 8. 8
  • 9. 9
  • 10. 10
  • 11. 11
  • 12. 12
  • 13. 13
  • 14. 14
  • 15. 15
  • 16. 16
  • 17. 17
  • 18. 18
  • 19. 19
  • 20. 20
  • 21. My Experience Struts 1: used since June 2001 - same time 1.0 was released. Spring MVC: used since January 2004 - before 1.0 was released. Struts 2: used since July 2004. Tapestry: used since July 2004. JSF: used since July 2004 - both Sun’s RI and MyFaces. Stripes and Wicket: used since April 2007. 21
  • 23. JSF Pros: Java EE Standard - lots of demand and jobs Fast and easy to develop with initially Lots of component libraries Cons: Tag soup for JSPs Doesn't play well with REST or Security No single source for implementation 23
  • 24. Spring MVC Pros: Lifecyle for overriding binding, validation, etc. Integrates with many view options seamlessly: JSP/ JSTL, Tiles, Velocity, FreeMarker, Excel, XSL, PDF Inversion of Control makes it easy to test Cons: Configuration intensive - lots of XML Almost too flexible - no common parent Controller No built-in Ajax support 24
  • 25. Stripes Pros: No XML - Convention over Configuration Good documentation (easy to learn) Enthusiastic community Cons: Small Community Not as actively developed as other projects Hard-coded URLs in ActionBeans 25
  • 26. Struts 2 Pros: Simple architecture - easy to extend Tag Library is easy to customize with FreeMarker or Velocity Controller-based or page-based navigation Cons: Documentation is poorly organized Too much concentration on new features Googling results in Struts 1.x documentation 26
  • 27. Tapestry Pros: Very productive once you learn it Templates are HTML - great for designers Lots of innovation between releases Cons: Documentation very conceptual, rather than pragmatic Steep learning curve Long release cycles - major upgrades every year 27
  • 28. Wicket Pros: Great for Java developers, not web developers Tight binding between pages and views Active community - support from the creators Cons: HTML templates live next to Java code Need to have a good grasp of OO The Wicket Way - everything done in Java 28
  • 30. Evaluation Criteria Ajax Support: Is it built-in and easy to use? Bookmark-ability: Can users bookmark pages and return to them easily? Validation: How easy is it to use and does it support client-side (JavaScript) validation? Testability: How easy is it to test Controllers out of container? 30
  • 31. Evaluation Criteria, cont. Post and Redirect: How does the framework handle the duplicate post problem? Internationalization: How is i18n supported and how easy is it to get messages in Controllers? Page Decoration: What sort of page decoration/ composition mechanisms does the framework support? Community and Support: Can you get questions answered quickly (and respectfully)? 31
  • 32. Evaluation Criteria, cont. Tools: Is there good tool (particularly IDE) support for the framework? Marketability of Skills: If you learn the framework, will it help you get a job? Job Count: What is the demand for framework skills on dice.com and indeed.com? 32
  • 33. Ajax Support Is Ajax support built-in and easy to use? JSF: No Ajax support, use ICEfaces and Ajax4JSF Stripes: No libraries, supports streaming results Struts 2: Dojo built-in, plugins for GWT, JSON Spring MVC: No libraries, use DWR & Spring MVC Extras Tapestry: Dojo built-in in 4.1 Wicket: Dojo and Script.aculo.us (Wicket Stuff) 33
  • 34. Bookmarking and URLs JSF does a POST for everything - URLs not even considered Stripes uses conventions, but you can override Struts 2 has namespaces - makes it easy Spring MVC allows full URL control Tapestry still has somewhat ugly URLs Wicket allows pages/URLs to be mounted 34
  • 35. Validation JSF has ugly default messages, but easiest to configure Spring MVC allows you to use Commons Validator - a mature solution Struts 2 uses OGNL for powerful expressions - client-side only works when specifying rules on Actions Tapestry has very robust validation - good messages without need to customize Stripes and Wicket do validation in Java - no client-side 35
  • 36. Testability Spring and Struts 2 allow easy testing with mocks (e.g. EasyMock, jMock, Spring Mocks) Tapestry appears difficult to test because page classes are abstract, Creator class simplifies JSF page classes can be easily tested and actually look a lot like Struts 2 actions Wicket has WicketTester, a powerful solution Stripes has Servlet API Mocks and MockRoundtrip 36
  • 37. Post and Redirect The duplicate-post problem, what is it? Easiest way to solve: redirect after POST Is there support for allowing success messages to live through a redirect? Spring MVC allows you to add parameters to a redirect Stripes, Tapestry and Wicket all have quot;flashquot; support Struts 2 requires a custom solution JSF requires a custom solution, i18n messages difficult to get in page beans 37
  • 38. Internationalization JSTL’s <fmt:message> tag makes it easy No standard for getting i18n messages in controller classes Stripes, Spring MVC and JSF use a single ResourceBundle per locale Struts 2, Tapestry and Wicket advocate separate files for each page/action JSF requires resource bundle to be declared on each page Tapestry's <span key=quot;key.namequot;> is awesome 38
  • 39. Page Decoration Tiles Experience: used since it first came out SiteMesh is much easier to setup and use Tiles can be used in Struts 2, Spring and JSF Requires configuration for each page SiteMesh can be used with all frameworks Requires very little maintenance after setup SiteMesh not supported or recommended for use with JSF, Tapestry or Wicket 39
  • 40. Tools Spring has Spring IDE - only does XML validation, not a UI/web tool Struts 2 has EclipseWork Tapestry has Spindle - great for coders JSF has many, and they're getting better and better Stripes and Wicket don't have any official tools NetBeans has support for: Struts *, JSF (+Facelets), Tapestry and Wicket (no Stripes or Spring MVC) 40
  • 41. Tools Available Struts 2 15.00 Spring MVC Stripes Wicket 11.25 12 JSF Tapestry 7.50 7 3.75 4 3 3 0 May 2007 41
  • 42. Marketability of Skills Struts 1 is still in high-demand and widely-used Spring is getting more press, but mostly due to the framework’s other features JSF is quickly becoming popular Struts 2 is gaining ground, but very scarce on job boards Tapestry has increased in popularity in last couple years Wicket and Stripes are virtually unknown 42
  • 43. Dice Job Count Struts 2 600 Spring MVC 574 Stripes JSF 450 Wicket Tapestry 300 190 150 68 52 0 10 6 May 3, 2006 43
  • 44. Dice Job Count w/ Struts Struts 2 2,500 Spring MVC Stripes JSF 2,063 1,875 Wicket Tapestry Struts 1 1,250 625 574 190 0 68 52 10 6 May 3, 2006 44
  • 46. Employer Search on Monster.com Resumes posted 4/3 - 5/3/2007 900 Struts 2 896 Spring MVC Stripes 720 Wicket JSF 540 Tapestry 360 180 108 87 55 0 16 16 46
  • 47. Mailing List Traffic Struts Stripes MyFaces Tapestry Wicket 0 500 1,000 1,500 2,000 * Spring MVC is not listed here because they have a forum instead of a mailing list and I couldn’t figure out a way to count the number of messages for each month. 47
  • 48. Mailing List Traffic GWT Struts Stripes MyFaces Tapestry Wicket 0 625 1,250 1,875 2,500 * Spring MVC is not listed here because they have a forum instead of a mailing list and I couldn’t figure out a way to count the number of messages for each month. 48
  • 49. Releases in 2007 5.00 Struts 2 5 Spring MVC Stripes 3.75 MyFaces Wicket Tapestry 3 2.50 2 2 1.25 1 1 0 49
  • 50. Books on Amazon 15.00 Struts 2 Spring MVC Stripes 11.25 JSF 11 Wicket Tapestry 7.50 7 3.75 3 3 1 0 May 2007 50
  • 51. Which would I choose? 51
  • 52. What do others think? Struts 2 25.00 Struts 1 Spring MVC JSF 18.75 Tapestry 12.50 6.25 0 AppFuse Usage - March 2007 52
  • 53. Resources Download this presentation http://static.raibledesigns.com/repository/presentations Struts - http://struts.apache.org StrutsTestCase: http://strutstestcase.sf.net Spring MVC - http://www.springframework.org Spring IDE: http://www.springide.org Gaijin Studio: http://gaijin-studio.sf.net Struts 2 - http://opensymphony.org/webwork Eclipse Plugin: http://sf.net/projects/eclipsework IDEA Plugin: http://wiki.opensymphony.com/display/WW/ IDEA+Plugin 53
  • 54. Resources, cont. Tapestry - http://tapestry.apache.org Spindle: http://spindle.sourceforge.net JSF - http://java.sun.com/j2ee/javaserverfaces and http:// myfaces.apache.org Java Studio Creator: http://sun.com/software/products/ jscreator MyEclipse: http://myeclipseide.com IDEA: http://www.jetbrains.com/idea SiteMesh: http://opensymphony.com/sitemesh 54
  • 55. Resources, cont. Testing Frameworks JUnit: http://junit.org EasyMock: http://easymock.org jMock: http://jmock.org jWebUnit: http://jwebunit.sourceforge.net Canoo WebTest: http://webtest.canoo.com Tapestry Test Assist: http://howardlewisship.com/blog/ 2004/05/tapestry-test-assist.html AppFuse - http://appfuse.org 55
  • 56. Books Starting Struts 2, Ian Roughly (free on InfoQ.com) The Spring Primer, Matt Raible Pro Spring, Rob Harrop and Jan Machacek Spring in Action, Craig Walls and Ryan Breidenbach Professional Java Development with Spring, Rod Johnson, Juergen Hoeller and Team 56
  • 57. Books, cont. WebWork in Action, Patrick Lightbody and Team Tapestry 101, Warner Onstine Tapestry in Action, Howard Lewis Ship Core JSF, David Geary and Cay Horstmann JSF in Action, Kito Mann Pro Wicket, Karthik Gurumurthy 57
  • 58. GWT Grails Seam Flex What’s Next? Trails Ruby on Rails Django OpenLaszlo 58
  • 59. Who cares? quot;If it works, use it!quot; 59