<?xml version="1.0"?>
<!--
Copyright 1999-2005 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
// ======================================================================== 78
-->
<document>

    <properties>
        <title>Announcements</title>
    </properties>

    <body>

        <section name="Announcements">

            <h4 id="a20060125.1">25 Jan 2006 - Struts Scripting 1.0.1
                Released</h4>
            <p>
                The Struts team is pleased to announce the release of Struts
                Scripting
                1.0.1 for General Availability. This is the first stable
                release of
                Struts Scripting (formerly Struts BSF). It allows Struts
                Actions to be
                written in the scripting language of one's choice rather than
                as Java
                classes. It uses the Bean Scripting Framework to allow scripts
                to be
                written in any language BSF supports like Perl, Python, Ruby,
                JavaScript, Groovy, and even VBScript.
            </p>
            <p>
                The binary and source distributions are available from the
                Struts
                download page:
                <a href="http://struts.apache.org/download.cgi">
                    http://struts.apache.org/download.cgi</a>
            </p>
            <p>
                You can find out more information about Struts Scripting at
                <a href="http://struts.apache.org/struts-scripting/">
                    http://struts.apache.org/struts-scripting/</a>
                .
            </p>
            <hr/>


            <h4 id="a20060117.1">17 Jan 2006 - New Struts Committers: Jason
                Carreira
                and Patrick Lightbody</h4>
            <p>
                Please join me in welcoming Jason Carreira and Patrick
                Lightbody as new
                Struts committers. Jason and Patrick are the core WebWork 2
                developers
                and they are joining us in an important step in the merger
                process. I, and
                many other Struts committers, have personally met and talked
                at length with
                both Patrick and Jason on several occasions and find them
                dedicated,
                skilled, and team players. Their dedication to WebWork 2 over
                the years is
                a testament to their perseverance, commitment to their
                community, and
                technical skill. We look forward to their contributions as
                committers.
            </p>

            <p>
                Welcome Jason and Patrick!
            </p>
            <p>
                PMC vote: 8 +1
            </p>
            <hr/>

            <h4 id="a20051218.1">18 Dec 2005 - New Struts Committer: Richard
                Feit</h4>
            <p>
                Please join us in welcoming Rich Feit as a new Struts
                committer. Rich is
                a Beehive committer and PMC member. In addition to being a
                Struts user
                for years (Beehive is built on Struts), he has been pivotal in
                designing
                and coding Struts Ti, both the initial annotationed Beehive
                version and
                the current WebWork merger effort. His experience in Struts
                migration
                tools in particular will be key to making Struts Action a
                success. We
                look forward to his continued contributions as a committer.
            </p>

            <p>
                Welcome, Rich!
            </p>
            <p>
                PMC vote: 7 +1, non-binding committer votes: 3 +1
            </p>
            <hr/>

            <h4 id="a20051214.4">14 Dec 2005 - Apache Struts to release Struts
                1.3.0
                as the "Action Framework"</h4>
            <p>
                The Apache Struts flagship product,
                the leading web application framework for Java,
                is now known as the "Struts Action Framework".
            </p>

            <p>
                To make the framework easier to maintain,
                Apache Struts subdivided the original monolithic distribution
                into several
                subprojects.
                Each subproject has its own website, documentation, and
                release cycle,
                and may be downloaded separately.
                For consistency, the original core framework component also
                has its own name
                now: "Struts Action Framework".
                The JARs and external dependencies for the extensions to
                Struts Action Framework
                are being bundled into a convenient distribution known as the
                "Struts Action
                Framework Library".
            </p>

            <p>
                The Struts Action Framework 1.3.0 release will include several
                exciting new
                features, including:
            </p>

            <ul>
                <li>Composable Request Processor</li>
                <li>ActionDynaForm interfaces</li>
                <li>Arbitrary configuration properties</li>
                <li>Catalog and Command Elements</li>
                <li>Enhanced Global Exception Handlers</li>
                <li>Extends attribute for XML configurations</li>
                <li>"isCommitted" Exception Handling</li>
                <li>Postback Actions</li>
                <li>Wildcard ActionConfig properties</li>
            </ul>

            <p>
                The key change in this release is the "composable request
                processor".
                The request processor is the framework's "kernal".
                The request processor methods are now command objects in a
                flexible chain of
                commands.
                Rather than subclassing a monolithic object,
                developers can now just replace commands with their own
                implementations.
                Commands can also be inserted or removed, if needed,
                to extend or streamline the request processing gauntlet,
                to better meet the needs of different kinds of applications.
            </p>

            <p>
                The Struts Action Framework 1.3.0 release,
                and other milestones on the Apache Struts roadmap,
                were discussed at ApacheCon on Tuesday, December 13, 2005, in
                a talk,
                entitled "Struts 2006: An Embarrassment of Riches".
                <a href="http://people.apache.org/~husted/apachecon-2005-action.pdf">
                    Slides from the talk are available online</a>
                .
            </p>
            <hr/>

            <h4 id="a20051214.3">14 Dec 2005 - Apache Struts and Open Symphony
                WebWork
                communities to merge</h4>
            <p>
                Apache Struts,
                the leading web application framework for Java, and Open
                Symphony WebWork,
                a leader in technical innovation, are working to merge their
                communities
                and codebases.
            </p>

            <p>
                "A merger is an elegant approach to evolution of existing
                applications
                based on action-oriented frameworks,"
                said Craig McClanahan, founder of the Struts project.
            </p>

            <p>
                The merger seems like a win-win for the frameworks.
                "The technical benefit is that WebWork has already done most
                everything
                that is on the Struts Action roadmap," noted Ted Husted, a
                Struts committer.
                "This is a way that [Struts] shops can use incremental
                integration to take
                advantage of new technologies that are already part of
                WebWork, such as Spring."
            </p>

            <p>
                "My hope is to take advantage of a larger community (Struts)
                to allow
                all of us to do a bit less individual effort."
                said Patrick Lightbody of WebWork.
                "I would expect moving to Struts lets us focus on our families
                and day
                jobs a bit more."
            </p>

            <p>
                Apache projects help developers balance day jobs with
                volunteer work
                through the practice of collaborative developement.
                Decisions are made jointly by the core community,
                rather than by one or two key individuals.
                The projects are organized so that individual developers can
                focus on
                other matters for a time,
                and then return to the development community as schedules
                allow.
            </p>

            <p>
                Over the past few months,
                Apache Struts has more than doubled its number of active
                committers.
                With the addition of two WebWork developers,
                there are about fifteen active volunteers.
                Right now, about half of the committers are working on the
                original Struts
                Action Framework and half are working on the new Struts Shale
                Framework,
                which utilizes JavaServer Faces.
                Several volunteers are now working with both frameworks.
            </p>

            <p>
                The merger and other milestones on the Apache Struts roadmap
                were discussed
                in a talk at ApacheCon on Tuesday, December 13, 2005, entitled
                "Struts 2006:
                An Embarrassment of Riches"
                [http://people.apache.org/~husted/apachecon-2005-action.pdf].
                The talk will be presented by Lightbody, Husted, and Don
                Brown, another
                Struts Committer.
                The Struts Shale framework is being discussed at a second
                talk,
                presented by McClanahan, entitled "Shale: The Next Struts??"
                <a href="http://people.apache.org/~craigmcc/apachecon-2005-shale.pdf">
                    Slides from the talk are available online</a>
                .
            </p>
            <hr/>

            <h4 id="a20051214.2">14 Dec 2005 - Apache Struts offers "Shale"
                for JSF</h4>
            <p>
                To give JavaServer Faces developers a head start on building
                scalable
                web applications for the enterprise,
                Apache Struts now offers the Shale Framework.
                Like the original "Struts Action Framework",
                Shale provides developers with a front controller,
                and several other components,
                to provide the "invisible underpinnings that hold an
                application together".
            </p>

            <p>
                "When JavaServer Faces arrived,"
                explains the Struts website,
                "our development community chose to 'make new friends but keep
                the old'.
                Some of us want (or need) to stick with the original
                request-based
                framework.
                Others are ready to switch to an component-based framework
                that builds on
                JavaServer Faces.
                We offer both frameworks because we have volunteers to create
                and maintain
                both frameworks."
            </p>

            <p>
                Shale is based on the recently standardized JavaServer Faces
                APIs,
                and focuses on adding value,
                rather than redundantly implementing features that JSF already
                provides.
                Shale will run on any compliant JSF implementation,
                including the one being developed by the Apache MyFaces
                project.
                It also includes many features that Struts users appreciate,
                such as supporting client side validation and the Tiles
                framework.
            </p>

            <p>
                Struts Shale was discussed by Craig McClanahan in a talk at
                ApacheCon on
                Tuesday, December 13, 2005, entitled "Shale: The Next
                Struts??".
                <a href="http://people.apache.org/~craigmcc/apachecon-2005-shale.pdf">
                    Slides
                    from the talk are available online</a>
                .
            </p>
            <hr/>

            <h4 id="a20051214.1">14 Dec 2005 - Apache Struts to release
                "standalone" Tiles</h4>
            <p>
                Apache Struts introduced Tiles as a integral component of its
                Struts 1.1
                release in June 2003.
                Since then, several other projects have been using Tiles,
                even though it was embedded in the Struts JAR.
                Soon, it will be much easier to use Tiles with products like
                Jakarta Velocity,
                Apache MyFaces, and Struts Shale.
            </p>

            <p>
                Tiles is a templating framework that can be used to create a
                common look and
                feel for a web site or application and to create reusable view
                components.
                A key aspect of Tiles is that it can be configured from a XML
                configuration file.
                A Tile definition can "extend" another definition,
                giving the component an object-oriented feel.
                Tile developers can create a base Tile (or screen layout),
                and then indicate only how other Tiles differ from the base.
                Changes made to a base Tile "cascade" to Tiles that extend
                that base.
                Significant changes can be made to the layout of a website
                just by changing a single Tile definition.
            </p>
            <hr/>

            <h4 id="a20051125">25 Nov 2005 - Struts 1.2.8 (General
                Availability)</h4>
            <p>
                The Struts team is pleased to announce the release of Struts
                1.2.8 for
                General Availability. This release is primarily to fix a Cross
                Site
                Scripting (XSS) vulnerability identified in Struts by
                www.hacktics.com and
                supersedes the earlier 1.2.7 version as the latest official
                release of
                Struts from The Apache Software Foundation.
            </p>
            <p>
                For more information on the XSS Vulnerability and solutions
                please see the
                following pages:
                <a href="http://wiki.apache.org/struts/StrutsXssVulnerability">
                    http://wiki.apache.org/struts/StrutsXssVulnerability</a>
                and
                <a href="http://www.hacktics.com/AdvStrutsNov05.html">
                    http://www.hacktics.com/AdvStrutsNov05.html</a>
            </p>
            <p>
                The binary, source and library distributions are available
                from the Struts
                download page:
                <a href="http://struts.apache.org/download.cgi">
                    http://struts.apache.org/download.cgi</a>
            </p>
            <p>
                The Release Notes are available on the Struts web site at:
                <a href="http://struts.apache.org/struts-doc-1.2.8/userGuide/release-notes.html">
                    http://struts.apache.org/struts-doc-1.2.8/userGuide/release-notes.html</a>
            </p>
            <p>
                Please check the wiki for the latest information on upgrading:
                <a href="http://wiki.apache.org/struts/StrutsUpgrade">
                    http://wiki.apache.org/struts/StrutsUpgrade</a>
            </p>
            <hr/>

            <h4 id="a20051023.2">23 Oct 2005 - New Struts Committer: Laurie
                Harper</h4>
            <p>
                Please join us in welcoming Laurie Harper as a new Struts
                committer. Over
                the last few months, he has made hundreds of helpful posts to
                our lists.
                Laurie is the author of the very cool
                <a href="http://www.zotechsoftware.com/products/struts-sidebar">
                    Struts Sidebar</a>
                ,
                and he has contributed several patches to Struts Classic,
                including fixes to our unit tests (a thankless job).
            </p>
            <p>
                Welcome, Laurie! .. We're looking forward to many more green
                bars!
            </p>
            <p>
                PMC vote: 7 +1 (binding), 1 +1 (non-binding)
            </p>
            <hr/>

            <h4 id="a20051023.1">23 Oct 2005 - New Struts Committer: Sean
                Schofield</h4>
            <p>
                Please join us in welcoming Sean Schofield as a Struts
                committer. Sean is an
                Apache MyFaces committer who also been been working on Struts
                Shale.
            </p>
            <p>
                Welcome, Sean! .. Now you can apply your own patches!
            </p>
            <p>
                PMC vote: 5 +1, 1 +0
            </p>
            <hr/>

            <h4 id="a20051023.0">23 Oct 2005 - New Struts Committer: Greg
                Reddin</h4>
            <p>
                Please join us in welcoming Greg Reddin as a Struts committer.
                Greg has been
                an active Struts contributor for a long time now, and has been
                helping us
                move Tiles towards a standalone subproject.
            </p>
            <p>
                Welcome, Greg! .. We look forward to rapid progress on
                Standalone Tiles!
            </p>
            <p>
                PMC vote: 6 +1
            </p>
            <hr/>

            <h4 id="a20050821">21 Aug 2005 - New Struts Committer: Gary
                vanMatre</h4>

            <p>
                Please join us in welcoming Gary vanMatre as a new Struts
                committer.
                Gary has been quite busy proposing code for the "Clay" plug-in
                on Shale,
                and has also been supportive on the dev and user mailing lists
                (for both Struts and MyFaces).
                We look forward to his energy being available to the entire
                Struts project as well.
            </p>
            <p>
                Welcome, Gary! .. And now you can process some of your own
                outstanding code diffs :-).
            </p>
            <p>
                PMC vote: 5 +1
            </p>
            <hr/>

            <h4 id="a20050715">15 Jul 2005 - New Struts Committer: Wendy
                Smoak</h4>
            <p>
                Please join me in welcoming Wendy Smoak as a new Struts
                committer.
                Wendy has been a tremendous asset to the Struts community for
                several years now,
                providing unflagging support to the user base as well as
                invaluable input and feedback to the development team.
                We look forward to her continued contributions as a committer.
            </p>
            <p>
                Welcome, Wendy!
            </p>
            <p>
                PMC vote: 7 +1, 2 +0.
            </p>
            <hr/>

            <h4 id="a20050526">26 May 2005 - Struts 1.2.7 (General
                Availability)</h4>
            <p>
                The Struts team is pleased to announce the release of Struts
                1.2.7 for
                General Availability. This release includes new
                functionality, as well as numerous fixes for bugs which were
                reported
                against the previous release, and supersedes the earlier 1.2.4
                version
                as the latest official release of Struts from The Apache
                Software
                Foundation.
            </p>
            <p>
                The binary, source and library distributions are available
                from the
                <a href="http://struts.apache.org/download.cgi">Struts
                    download page</a>
                .
                The
                <a href="http://struts.apache.org/userGuide/release-notes.html">
                    Release Notes</a>
                are available on the Struts web site.
            </p>
            <hr/>
            <h4 id="a20050331">31 March 2005 - New Struts PMC Chair</h4>
            <p>
                <a href="http://struts.apache.org/volunteers.html#martinc">
                    Martin Cooper</a>
                has been appointed
                <strong>Struts PMC Chair</strong>
                by the ASF Board at their
                <strong>February 2005</strong>
                meeting.
            </p>
            <p>
                <a href="http://struts.apache.org/volunteers.html#craigmcc">
                    Craig McClanahan</a>
                stepped down
                as the Struts PMC Chair in February 2005. In Craig's words "I
                will continue to be active, but it's time
                for someone else to take the administrative
                responsibilities.".
            </p>
            <p>
                The Struts PMC nominated Martin Cooper as their preferred
                choice for the Struts PMC
                Chair to the ASF Board which was approved unanimously. Minutes
                of the ASF Board meeting should
                be available
                <a href="http://www.apache.org/foundation/board/calendar.html">
                    here</a>
                in due course.
            </p>
            <hr/>

            <h4 id="a20050225">25 Feb 2005 - New Struts Committer: Hubert
                Rabago</h4>
            <p>

                We are pleased to announce that Hubert Rabago has accepted an
                invitation to join the
                Struts development community as a committer. We were impressed
                by Hubert's sustained
                participation in both the user and dev mailing lists, where he
                has demonstrated
                knowledge and respect for the community. He has clearly put
                considerable energy into
                how Struts works, both from a code perspective as well as a
                community perspective.
            </p>
            <p>
                So, we've begun the formalities to get his account set up and
                such, and we look forward
                to the day when we can tell him to commit his own darn
                patches.

            </p>
            <hr/>

            <h4 id="a20050217">17 Feb 2005 - New Struts subproject: Struts
                Flow</h4>
            <p>
                The Apache Struts team is pleased to announce the adoption of
                its latest
                subproject, Struts Flow, a continuations-based approach to
                complex web
                workflows. Struts Flow orginated at the struts.sf.net project
                and has
                been formally adopted now as a Struts subproject. Struts Flow
                is a port
                of Apache Cocoon's Control Flow to Struts to allow complex
                workflow,
                like multi-form wizards, to be easily implemented using
                continuations-capable Javascript and eventually Java.
            </p>
            <p>
                Today, Struts is comprised of nine subprojects: Core, Taglib,
                Tiles, El,
                Faces, Scripting, Applications, Shale, and (now) Flow. Struts
                Flow is
                different from Struts Scripting/BSF as where scripting brings
                any
                BSF-supported scripting language to Struts Actions, Struts
                Flow works on
                redefining the traditional Model 2 state-driven workflow into
                simplified
                scripots whos eexecute spans multiple requests. Currently, the
                Rhino
                engine, a Javascript implementation, is used to provide
                continuations
                support, but with the maturation of
                <a href="http://jakarta.apache.org/commons/sandbox/javaflow/">
                    Commans Javaflow</a>
                - a Java-based continuations implementation,
                Java will soon be supported as well.
            </p>
            <p>
                For more information, visit the
                <a href="http://struts.apache.org/flow/index.html">
                    Struts Flow website</a>
                .
            </p>
            <hr/>


            <h4 id="a20050123">23 Jan 2005 - New Struts subproject: Shale</h4>
            <p>
                The Apache Struts team is pleased to announce the adoption of
                its latest
                subproject, Struts Shale, a JSF-based framework. The Shale
                codebase was
                initiated by Craig McClanahan in the Struts sandbox, and
                development
                traffic regarding Shale has steadily increased. As the product
                is heading
                towards an initial release, the Struts PMC felt it time to
                formally adopt
                Struts Shale as a subproject.
            </p>
            <p>
                Today, Struts is comprised of eight subprojects: Core, Taglib,
                Tiles, El,
                Faces, Scripting, Applications, and (now) Shale. An initiative
                is underway
                to extract the Struts Tiles code into a standalone product.
                Several Struts
                developers plan to apply to the ASF to incubate
                <a href="http://wiki.apache.org/struts/TilesTopLevel">Tiles as
                    a toplevel
                    project</a>
                .
            </p>
            <p>
                For more about the Struts Shale subproject, see the
                <a href="http://struts.apache.org/kickstart.html">Kickstart
                    FAQ</a>
                .
            </p>
            <hr/>

            <h4 id="a20041212">12 Dec 2004 - Struts 1.2.6 (Beta)</h4>
            <p>
                The Struts team is pleased to announce the release of Struts
                1.2.6
                Beta. This release includes minor new functionality, and a
                number of
                fixes for bugs which were reported against previous versions.
            </p>
            <p>
                The binary, source and library distributions are available
                from the
                <a href="http://struts.apache.org/download.cgi">Struts
                    download page</a>
                .
                The
                <a href="http://struts.apache.org/userGuide/release-notes.html">
                    Release Notes</a>
                are available on the Struts web site.
            </p>
            <hr/>

            <h4 id="a20040919">19 Sep 2004 - Struts 1.2.4 (General
                Availability)</h4>
            <p>
                The Struts team is pleased to announce the release of Struts
                1.2.4 for
                General Availability. This release includes significant new
                functionality, as well as numerous fixes for bugs which were
                reported
                against the previous release, and supersedes the earlier 1.1
                version
                as the latest official release of Struts from The Apache
                Software
                Foundation.
            </p>
            <p>
                The binary, source and library distributions are available
                from the
                <a href="http://struts.apache.org/download.cgi">Struts
                    download page</a>
                .
                The
                <a href="http://struts.apache.org/userGuide/release-notes.html">
                    Release Notes</a>
                are available on the Struts web site.
            </p>
            <hr/>

            <h4 id="a20040831">31 Aug 2004 - Struts 1.2.2 (General
                Availability)</h4>
            <p>
                The Apache Struts team is proud to announce the release of
                Struts 1.2.2.
                This release includes many new enhancements and features as
                well as numerous
                bug fixes since the last generally available release (1.1).
                This release supersedes the earlier 1.1 version as the latest
                official release
                of The Apache Struts framework.
            </p>
            <ul>
                <li>
                    <a href="http://struts.apache.org/userGuide/release-notes.html">
                        http://struts.apache.org/userGuide/release-notes.html</a>
                </li>
            </ul>
            <p>
                The binary, source, and library distributions are available at
            </p>
            <ul>
                <li>
                    <a href="http://struts.apache.org/download.cgi">
                        http://struts.apache.org/download.cgi/</a>
                </li>
            </ul>
            <p>
                The library distribution contains only the requisite JARs,
                without the documentation or example applications.
            </p>
            <p>
                We invite your comments on how well this release works with
                your own applications. Based on feedback from the Struts
                community, this release may be dubbed "ready for prime time"
                and promoted to "General Availabilty" quality.
            </p>
            <p>
                Please note that Struts now uses "Tomcat-style" releases. If
                the feedback on this release were positive, Struts 1.2.1 may
                be promoted directly to "GA", without creating yet-another
                distribution. If a serious problem were found and fixed, then
                we will issue Struts 1.2.2 and try again.
            </p>
            <hr/>

            <h4 id="a20040711">11 Jul 2004 - Struts 1.2.1 (Beta)
                Available</h4>
            <p>
                The Struts team announces the release of Struts 1.2.1,
                currently ranked at Beta quality.
            </p>
            <p>
                This release removes many features deprecated in prior
                releases (Struts 1.1 and Struts 1.0.2) and also provides
                several new features. Fixes to known problems have been
                applied. More detail is available at:
            </p>
            <ul>
                <li>
                    <a href="http://struts.apache.org/userGuide/release-notes.html">
                        http://struts.apache.org/userGuide/release-notes.html</a>
                </li>
            </ul>
            <p>
                The binary, source, and library distributions are available at
            </p>
            <ul>
                <li>
                    <a href="http://cvs.apache.org/dist/struts/v1.2.1/">
                        http://cvs.apache.org/dist/struts/v1.2.1/</a>
                </li>
            </ul>
            <p>
                The library distribution contains only the requisite JARs,
                without the documentation or example applications.
            </p>
            <p>
                We invite your comments on how well this release works with
                your own applications. Based on feedback from the Struts
                community, this release may be dubbed "ready for prime time"
                and promoted to "General Availabilty" quality.
            </p>
            <p>
                Please note that Struts now uses "Tomcat-style" releases. If
                the feedback on this release were positive, Struts 1.2.1 may
                be promoted directly to "GA", without creating yet-another
                distribution. If a serious problem were found and fixed, then
                we will issue Struts 1.2.2 and try again.
            </p>
            <hr/>

            <h4 id="a20030630">30 Jun 2003 - Struts 1.1 Final released</h4>
            <p>
                The Struts team is proud, and extremely pleased, to announce
                the Final
                release of Struts 1.1. This release includes significant new
                functionality, as well as numerous fixes for bugs which were
                reported
                against the previous release, and supersedes the earlier 1.0.2
                version
                as the latest official release of Struts from the Apache
                Software
                Foundation.
            </p>
            <p>The binary distribution is available at:
                <a href=
                        "http://www.apache.org/dist/jakarta/struts/binaries/">
                    http://www.apache.org/dist/jakarta/struts/binaries/</a>
            </p>
            <p>and the source distribution is available at:
                <a href=
                        "http://www.apache.org/dist/jakarta/struts/source/">
                    http://www.apache.org/dist/jakarta/struts/source/</a>
            </p>
            <p>In addition, the library distribution, which contains updated
                binaries
                without the sample applications, is available at:</p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/library/">
                    http://www.apache.org/dist/jakarta/struts/library/</a>
            </p>
            <p>Details of the changes in this release are available in the
                Release
                Notes,which can be found here:</p>
            <p>
                <a href=
                        "http://jakarta.apache.org/struts/userGuide/release-notes-1.1.html">
                    http://jakarta.apache.org/struts/userGuide/release-notes-1.1.html</a>
            </p>
            <hr/>

            <h4 id="a20030223">23 Feb 2003 - Struts 1.1 Release Candidate 1
                Released</h4>
            <p>
                The Struts team is proud to announce the release of Struts 1.1
                Release
                Candidate 1. This release includes some new functionality, as
                well as
                fixes for a number of bugs which were reported against earlier
                versions.
                The Struts Team believes that this release is ready for prime
                time, hence
                its designation as a release candidate.
            </p>
            <p>
                The binary distribution is available at:
            </p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/binaries/">
                    http://www.apache.org/dist/jakarta/struts/binaries/</a>
            </p>
            <p>
                and the source distribution is available at:
            </p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/source/">
                    http://www.apache.org/dist/jakarta/struts/source/</a>
            </p>
            <p>
                In addition, the library distribution, which contains updated
                binaries
                without the sample applications, is available at:
            </p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/library/">
                    http://www.apache.org/dist/jakarta/struts/library/</a>
            </p>
            <p>
                Details of the changes in this release are available in the
                Release
                Notes, which can be found here:
            </p>
            <p>
                <a href="http://jakarta.apache.org/struts/userGuide/release-notes-1.1-rc1.html">
                    http://jakarta.apache.org/struts/userGuide/release-notes-1.1-rc1.html</a>
            </p>
            <hr/>

            <h4 id="S20021231">31 Dec 2002 - Struts 1.1 Beta 3 Released</h4>
            <p>The Struts team is proud to announce the release of Struts 1.1
                Beta 3. This
                release includes significant new functionality, while
                retaining full
                backwards compatibility with earlier versions of Struts. It
                also
                incorporates fixes for a number of bugs which were reported
                against earlier
                versions.
            </p>
            <p>
                The binary distribution is available at:
            </p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/binaries/">
                    http://www.apache.org/dist/jakarta/struts/binaries/</a>
            </p>
            <p>
                and the source distribution is available at:
            </p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/source/">
                    http://www.apache.org/dist/jakarta/struts/source/</a>
            </p>
            <p>
                In addition, the library distribution, which contains updated
                binaries
                without the sample applications, is available at:
            </p>
            <p>
                <a href="http://www.apache.org/dist/jakarta/struts/library/">
                    http://www.apache.org/dist/jakarta/struts/library/</a>
            </p>
            <p>
                Details of the changes in this release are available in the
                Release Notes,
                which can be found here:
            </p>
            <p>
                <a href="http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b3.html">
                    http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b3.html</a>
            </p>
            <hr/>

            <h4 id="a20020813">12 Aug 2002 - Struts 1.1 Beta 2 Released</h4>
            <p>The Struts team is proud to announce the release of Struts 1.1
                Beta 2. This
                release includes significant new functionality, while
                retaining full
                backwards compatibility with earlier versions of Struts. It
                also
                incorporates fixes for a number of bugs which were reported
                against earlier
                versions.
            </p>
            <p>
                The binary distribution is available at:
            </p>
            <p>
                <a href="http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/">
                    http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/</a>
            </p>
            <p>
                and the source distribution is available at:
            </p>
            <p>
                <a href="http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/src/">
                    http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/src/</a>
            </p>
            <p>
                In addition, the library distribution, which contains updated
                binaries
                without the sample applications, is available at:
            </p>
            <p>
                http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/lib/
            </p>
            <p>
                Details of the changes in this release are available in the
                Release Notes,
                which can be found here:
            </p>
            <p>
                http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b2.html
            </p>
            <hr/>

            <h4 id="a20020319">19 Mar 2002 - Struts 1.1 Beta 1 Released</h4>
            <p>
                The Struts team announces the release of Struts 1.1 Beta 1.
                This release
                includes substantial new functionality, while retaining full
                backwards
                compatibility with earlier versions of Struts. It also
                incorporates fixes
                for a number of bugs which were reported against earlier
                versions.
            </p>
            <p>
                The binary distribution for this release is available
                <a href="http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b1/">
                    <strong>here</strong>
                </a>
                and the source distribution
                is available
                <a href="http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b1/src/">
                    <strong>here</strong>
                </a>
                .
                In addition, a library distribution, which consists of a
                minimal
                binary distribution, without sample web applications or
                additional code, is
                available
                <a href="http://www.apache.org/dist/jakarta/jakarta-struts/release/v1.1-b1/lib/">
                    <strong>here</strong>
                </a>
                .
            </p>
            <hr/>

            <h4 id="a20020211">11 Feb 2002 - Struts 1.0.2 Released</h4>
            <p>
                The Struts team announces the release of Struts 1.0.2. This
                release is a
                bug fix only release, which fixes a compatibility problem
                inadvertently introduced
                with the previous 1.0.1 release.
            </p>
            <p>
                The binary distribution for this release is available
                <a href="http://jakarta.apache.org/builds/jakarta-struts/release/v1.0.2/">
                    <strong>here</strong>
                </a>
                and the source distribution
                is available
                <a href="http://jakarta.apache.org/builds/jakarta-struts/release/v1.0.2/src/">
                    <strong>here</strong>
                </a>
                .
                In addition, a library distribution, which consists of a
                minimal
                binary distribution, without sample web applications or
                additional code, is
                available
                <a href="http://www.apache.org/dist/jakarta/jakarta-struts/release/v1.0.2/lib/">
                    <strong>here</strong>
                </a>
                .
            </p>
            <hr/>

            <h4 id="a20020112">12 Jan 2002 - Struts 1.0.1 Released</h4>
            <p>
                The Struts team is proud to announce the release of Struts
                1.0.1. This
                release is primarily a bug fix release, which fixes a number
                of known
                problems with the previous 1.0 release.
            </p>
            <p>
                The binary distribution for this release is available
                <a href="http://www.apache.org/dist/jakarta/jakarta-struts/release/v1.0.1/">
                    here</a>
                and the source distribution is available
                <a href="http://www.apache.org/dist/jakarta/jakarta-struts/release/v1.0.1/src/">
                    here</a>
                .
                In addition, a library distribution, which consists of a
                minimal binary distribution,
                without sample web applications or additional code, is
                available
                <a href="http://www.apache.org/dist/jakarta/jakarta-struts/release/v1.0.1/lib/">
                    here</a>
                .
            </p>
            <hr/>


            <h4 id="a20010615">15 Jun 2001 - Struts 1.0 Released</h4>

            <p>
                The production release of Struts 1.0, an open source framework
                for building Web applications, is now available for download
                at jakarta.apache.org. Struts encourages application
                architectures based on the Model-View-Controller (MVC) pattern
                and provides services common
                to most Web applications. Struts helps developers deploy
                products that are reliable, scaleable, and easier to maintain.
            </p>

            <p>
                The Struts framework offers services in three primary areas:
            </p>

            <p>
                * A controller servlet to dispatch requests to specific Action
                classes (provided by the application developer).
                <br/>
                * JSP custom tags to help developers create interactive
                form-based applications.
                <br/>
                * Utility classes for XML parsing, automatic JavaBean
                population, and internationalization of prompts and messages.
            </p>

            <p>
                Struts' support for internationalization builds on top of the
                Java Locale API, and have made it a popular choice for
                applications worldwide. Struts contributors include developers
                from Australia, France, Russia, and other parts of the globe.
            </p>

            <p>
                In addition to the Struts official distribution, several
                third-party libraries are already available, which offer
                enhanced support for JSP templates, HTML form validation, and
                automatic JavaBean creation. Struts has also been integrated
                with the Expresso Framework distributed by
                JCorporate Ltd. (jcorporate.com).
            </p>

            <p>
                Struts can be used with a J2EE Application server to deploy
                distributed applications, but will run under any compliant
                Servlet container (Servlet API 2.2+, JSP 1.1+), including
                Tomcat 3.2 or later. In fact, Struts is already used as an
                informal compliance test for Java Servlet
                containers and J2EE Application servers
            </p>

            <p>
                The Struts project was founded in May 2000 by Craig
                McClanahan. McClanahan is also the lead developer of Tomcat
                4.0, Sun's reference implementation for Java Servlet and
                ServerPage containers. Both Tomcat and Struts are open source
                available under the Apache Software License,
                and may be downloaded at jakarta.apache.org.
            </p>

            <p>
                Twenty-six independent developers contributed to the creation
                of Struts 1.0, with the help of over 1300 subscribers to the
                Struts mailing lists.
                <br/>
            </p>

            <hr/>

        </section>

        <section>
            <p class="right">
                <strong>Next:</strong>
                <a href="faqs.html">Frequently Asked Questions</a>
            </p>
        </section>

    </body>
</document>
