In between coping with a crashed server on my local network, I've started to make the "final" round of changes on the new website.
I'll be committing these as I go along, but I thought it appropriate to post the reworked text for the Site and Core homepages directly to the list. We had talked about the project's goal in terms of a particular technology ("Struts Classic"). In this version, the underlying "Model 2" goal bubbles up to the first sentance. From day one, the idea that Struts exists to promote Model 2 application architectures has always been there, we've just never put that sentence front and center before. ---- Welcome to Apache Struts! The goal of the Apache Struts project is to encourage application architectures based on the "Model 2" approach, a variation of the classic Model-View-Controller (MVC) design paradigm. Under Model 2, a servlet manages business logic execution, and presentation logic resides mainly in server pages. The Apache Struts project encourages Model 2 designs in two ways. First, by providing open source frameworks and toolkits that help developers build applications for the web. Second, by providing friendly and honest mailing lists where both newcomers and veterans can discuss how to use Struts software in their own Model 2 applications. Originally, the Apache Struts software was distributed as one monolithic bundle. Today, the Struts project is comprised of several subprojects. Each subproject has its own website, documentation, and release cycle, and may be downloaded separately. The six original Apache Struts subprojects -- Core, Taglibs, Tiles, Extras, Applications, and EL -- are also being bundled into a distribution known as "Struts Classic". Apache Struts is a volunteer project and all support for the framework is provided by unpaid volunteers. This documentation bundle and the mailing lists are the primary ways to learn how to use Struts. The next few pages are devoted to helping you understand what resources are available to you. Since Apache Struts is a volunteer project, and our resources are limited, it is important that we first help you help yourself. Struts is a project of the The Apache Software Foundation. The official Apache Struts home page is at http://struts.apache.org/. ---- The rest of the Welcome page text now lives under Struts Core: ---- Welcome to Struts Core Struts Core provides the invisible underpinnings every professional web application needs to survive. Struts Core is a flexible control layer based on standard technologies like Java Servlets, JavaBeans, ResourceBundles, and XML, as well as various Jakarta Commons packages. Core helps you create an extensible development environment for your application, based on published standards and proven design patterns. Struts Core provides its own Controller component and integrates with other technologies to provide the Model and the View. For the Model, Core can interact with standard data access technologies, like JDBC and EJB, as well as most any third-party packages, like Hibernate, iBATIS, or Object Relational Bridge. For the View, Core works well with JavaServer Pages, including JSTL and JSF, as well as Velocity Templates, XSLT, and other presentation systems. Struts Core in a Nutshell A web application uses a deployment descriptor to initialize resources like servlets and taglibs. The deployment descriptor is formatted as a XML document and named "web.xml". Likewise, Core uses a configuration file to initialize its own resources. These resources include ActionForms to collect input from users, ActionMappings to direct input to server-side Actions, and ActionForwards to select output pages. Here's a simple Struts configuration (struts-config.xml) for a login workflow: <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="logonForm" type="app.LogonForm"/> </form-beans> <action-mappings> <action path="/Welcome" forward="/pages/Welcome.jsp"/> <action path="/Logon" forward="/pages/Logon.jsp"/> <action path="/LogonSubmit" type="app.LogonAction" name="logonForm" scope="request" validate="true" input="/pages/Logon.jsp"> <forward name="success" path="/pages/Welcome.jsp"/> <forward name="failure" path="/pages/Logon.jsp"/> </action> <action path="/Logoff" type="app.LogoffAction"> <forward name="success" path="/pages/Logoff.jsp"/> </action> </action-mappings> <message-resources parameter="resources.application"/> </struts-config> There are several other resources you can specify in Struts configuration files. You can specify validations for the ActionForms in an XML descriptor, using the Struts Validator. A standard extension, Tiles, helps you build pages from smaller fragments. Struts Core is an extensible framework. Every class deployed by Core can be replaced by your own default class. The properties of your default class can be set using the Digester's set-property feature. This is one reason why there are so many contributor extensions for Struts Core. Core provides a base framework, but you can still write your application your way. For more about Struts and its underlying technologies, see the User Guide and the Developer Guides. Is Struts Core the best choice for every project? No. If you need to write a very simple application, with a handful of pages, then you might consider a "Model 1" solution that uses only server pages. But, if you are writing a more complicated application, with dozens of pages, that need to be maintained over time, then Struts can help. For more about whether Model 1 or or MVC/Model 2 is right for you, see Understanding JavaServer Pages Model 2 architecture and Issues in Struts Adoption. What about JSTL and JavaServer Faces? Next: Struts Core User Guide ---- I really must commend Wendy and James for the excellent work on the new Struts build. It's working well, and I'm having fun with it. :) -Ted. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]