comparing java web framew orks - raible designs :: static resources

48
© 2007 Raible Designs, Inc. Comparing Java Web Frameworks JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket Matt Raible [email protected] http://raibledesigns.com

Upload: others

Post on 12-Sep-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Comparing Java Web Frameworks

JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket

Matt [email protected]://raibledesigns.com

Page 2: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Today's Agenda

Introductions

Pros and Cons

Smackdown

Conclusion

Q and A

Page 3: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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

Page 4: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Power user of Java Open Source Frameworks

Author of Spring Live and Pro JSP 2.0

Founder of AppFuse and AppFuse Light

Member of Java EE 5, JSF 1.2 and Bean Validation Expert Groups

Committer on Apache Projects: Roller and Struts

Java Blogger since 2002

Who is Matt Raible?

Page 5: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Page 6: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

My Experience

Page 7: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Pros and Cons

Page 8: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

JSFPros:

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

Page 9: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Spring MVCPros:

Lifecyle for overriding binding, validation, etc.

Integrates with many view options seamlessly: JSP/JSTL, Tiles, Velocity, FreeMarker, Excel, 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

Page 10: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

StripesPros:

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

Page 11: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Struts 2Pros:

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

No feedback for missing properties or invalid OGNL expressions

Googling results in Struts 1.x documentation

Page 12: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

TapestryPros:

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

Page 13: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

WicketPros:

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

Page 14: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

The Smackdown

Page 15: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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?

Page 16: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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)?

Page 17: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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?

Page 18: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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)

Page 19: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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

Page 20: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

ValidationJSF 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

Page 21: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

TestabilitySpring 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

Page 22: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Post and RedirectThe duplicate-post problem: 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 "flash" support

Struts 2 requires a custom solution

JSF requires a custom solution, i18n messages difficult to get in page beans

Page 23: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

InternationalizationJSTL’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="key.name"> is awesome

Page 24: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Page DecorationTiles 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

Page 25: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Marketability of SkillsStruts 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 becoming popular; awful with JSP

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

Page 26: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Pretty Graphs

Page 27: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

0

200

400

600

800

November 14, 2007

6915

748

20

9877

Struts 2Spring MVCStripesJSFWicketTapestry

Dice.com Job Count

Page 28: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

0

750

1,500

2,250

3,000

November 14, 2007

2,249

6915

748

209877

Struts 2Spring MVCStripesJSFWicketTapestryStruts 1

Dice Job with Struts 1.x

Page 29: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Job Trends

Page 30: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Job Trends vs. Struts

Page 31: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Job Trends vs. J2EE

Page 32: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Job Trends vs. Java

Page 33: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

0

120

240

360

480

600

49

592

1211

8475

Struts 2Spring MVCStripesWicketJSFTapestry

Employer Search on Monster.comResumes posted in last 2 weeks

Page 34: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

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.

Mailing List Traffic

Page 35: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

0

2.5

5.0

7.5

10.0

222

1

6

4

Struts 2Spring MVCStripesMyFacesWicketTapestry

Releases in 2007

Page 36: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

0

3.75

7.50

11.25

15.00

May 2007

7

12

334

Struts 2Spring MVCStripesWicketJSFTapestry

Tools Available

Page 37: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

0

2.5

5.0

7.5

10.0

October 2007

3

2

10

7

4

Struts 2Spring MVCStripesJSFWicketTapestry

Books on Amazon

Page 38: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

How do you choose?

Page 39: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Eliminate, Don’t Include

Page 40: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Page 41: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

6 Important Factors

What type of Application are you building?

Ease of Development / Is full-stack an option?

Project Community

Project Future and Roadmap

Maintenance

Technical Features

Page 42: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Don’t believe the HypeDon’t believe blogs and articles

Try it yourself

Believe developers, not evangelists

Believe developers that are experienced with the framework and have used it in production

Beware of corporate interests - they can twist marketing

Books are a good sign

Page 43: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Best Tool for the Job

Frameworks have sweet spots - is your application one of them?

Pick 2-3 frameworks for your type of application...

... and prototype!

If prototyping is painful, switch

Make sure you prototype more than one and do a presentation comparing the pros and cons of each

Page 44: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

After Choosing...

Document the reasons for your decision

Allow developers to challenge it

Allow your prototype to be written with other frameworks

Don’t be afraid to try new frameworks

Don’t be afraid to use old frameworks

Don’t be afraid to keep your existing framework

Page 45: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

What do I think?

Page 46: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

Page 47: Comparing Java Web Framew orks - Raible Designs :: Static Resources

© 2007 Raible Designs, Inc.

The future is bright because of all the competition

Developers should know more than one web framework

You should try a framework before dissing it

The plethora of web frameworks is a good thing!

Doing proper research can save time and money

Testing is the best path to future maintenance

Conclusion