Struts is the best implementation for Model View Controller(MVC) pattern and widely accepted by the developers. This framework is originated by the Apache Foundation, a famous open source commuinty in Java. Recent days the Struts framework lossing its popularity to other frameworks in the market Java Server Faces(JSF),Spring,etc. But still its mostly used in all the web applications. Currently this project developement is stopped and started a sub project called Shale. Which is more like Java Server Faces(JSF).
Spring is a lightweight container and framework to develope and deploy the enterprise application. It is an alternative for Enterprise Java Beans(EJB). It reduce the complexity behind developing EJB's, and it uses only Plain Old Java Objects(POJOs) as the componenets. It uses two types of programming techniques : Inversion of control (also called as Dependency Injection) and Aspect Oriented Programming(AOP).
This framework become more popular amoung the J2EE developers becuse of its simplicity and its more flexible to add the persistance layer which ever you want for your application(ie,Hibernate, DAO,etc). Unlike EJBs it need not force you to add all the service to the container, you have the control of adding services to your application. The main pitfall of EJB is for an simple EJB also you have to bare the cost of container servies. But in spring this overhead is reduced. Every service has been modulrized and you have the option to add into your application. For your convenience, spring framework gives all the services in the different jar files. You can download it from here.
Also Spring gives you the MVC pattern to build your web application. This feature makes spring stand out from the other frameworks. Spring contains both container and framework. It gives the better way to integrate with EJBs and Struts framework. Those who feel EJB is more complicated, Spring will be the answer.
Java Server Faces(JSF)
Java Server Faces(JSF) is a java based web framework to develope web applications. Its is used inside an Java Server Pages(JSP) and gives more flexibility to design User Interfaces. This framework is designed and maintained by Sun Micro Systems. Craig McClanahan is the co-specification lead for this framework. Also he is the creator of Struts framework. You can read his blog to find more information about him. From his blog:
"It should come as no surprise that the most frequent questions I get asked center around the issue of which of these two web tier technologies an organization or individual developer should consider using. It makes sense to ask me, because I was the original creator of the Struts Framework, and was the co-specification lead for JavaServer Faces 1.0 (JSF).
WebWork is a Java web-application development framework. It is built specifically with developer productivity and code simplicity in mind. WebWork is built on top of XWork, which provides a generic command pattern framework as well as an Inversion of Control container. In addition to these features, WebWork provides robust support for building reusable UI templates, such as form controls, UI themes, internationalization, dynamic form parameter mapping to JavaBeans, robust client and server side validation, and much more.
WebWork's homepage is http://www.opensymphony.com/webwork.
Tapestry is an open-source framework for creating dynamic, robust, highly scalable web applications in Java. Tapestry complements and builds upon the standard Java Servlet API, and so it works in any servlet container or application server.
Tapestry divides a web application into a set of pages, each constructed from components. This provides a consistent structure, allowing the Tapestry framework to assume responsibility for key concerns such as URL construction and dispatch, persistent state storage on the client or on the server, user input validation, localization/internationalization, and exception reporting. Developing Tapestry applications involves creating HTML templates using plain HTML, and combining the templates with small amounts of Java code using (optional) XML descriptor files. In Tapestry, you create your application in terms of objects, and the methods and properties of those objects -- and specifically not in terms of URLs and query parameters. Tapestry brings true object oriented development to Java web applications.
This framework is developed by Apache foundation. You can access the documentation at the following URL Tapestry .