<?xml version="1.0"?>
<document url="./learning.xml">

<!--
// ======================================================================== 78
-->

<properties>
    <title>Learning - The Apache Struts Web Application Framework</title>
</properties>

<body>
<section name="Learning About Struts" href="Docs">

    <p>
    The <strong>official documentation</strong> for the framework is provided both 
    online and as a self-installing WAR in the distribution. 
    The <code>struts-documentation.war</code> includes our 
    </p>

    <ul>
    <li>
    <a href="userGuide/index.html">User and Developer Guides</a>,
    </li>
    <li>
    <a href="api/index.html">Comprehensive Javadocs</a>,
    </li>
    <li>
    <a href="./faqs/index.html">FAQ and Howto Guides</a>,
    </li>
    <li>
    and everything else you find here.
    </li>
    </ul>

    <p>
    You are invited to preview the documentation online and then install 
    the application locally for closer study.
    </p>

    
    <strong>NOTE:</strong> If you are previewing the documentation on the website, 
    most of the links in this section will refer to the <strong>Nightly Build</strong>.
    When learning about Struts, <strong>be sure to refer to the documentation for 
    the version you are actually using</strong>. 
    The documentation is bundled with each distribution as an application that 
    you can install and use locally.
    

    <p>
    The concise Struts <a href="userGuide/index.html"><strong>User Guide</strong></a> 
    introduces the Model-View-Controller architecture, and how it relates to 
    the major components of Struts.
    If you want to find out "How Struts works", this is the place to start.
    Along with an architectural overview, the User Guide also includes 
    detailed installation instructions and release notes for each version of 
    the framework.
    </p>

    <p>
        Our <strong>Developer Guides</strong> are detailed technical references to the extensions and components provided in the
        Struts distribution.
        Included are package overviews and API reference for each of the Struts taglibs, along with guides to the
        Struts Utilities and the Struts Validator.
        The Developer Guides are designed as a day-to-day reference to help you get the most out of the standard
        packages.
        Links to the various Developer Guides are provided as part of
        <a href="userGuide/index.html"><strong>User Guide</strong></a> menu.
    </p>

    <p>
    For more detail about a specific class or package, the Struts 
    <a href="api/index.html"><strong>Javadocs</strong></a> are <strong>surprisingly 
    comprehensive and carefully maintained</strong>. 
    It is <em>strongly</em> recommended that you refer to the 
    <a href="api/index.html"> Javadoc</a> for each class as you begin to use 
    it. 
    This will help ensure that important features and options are not 
    overlooked. 
    <em>What you don't know, can't help you.</em>
    </p>

    <p id="faqs">
    The Struts <strong>FAQs</strong> are designed to fill in any small gaps left by the 
    Javadocs or the User and Developer Guides. 
    </p>

    <ul>
    <li>The <a href="./faqs/kickstart.html">Kickstart FAQ</a> 
    answers the most common non-technical questions people first ask about 
    Struts. 
    </li>
    <li>
    The <a href="./faqs/newbie.html">Struts Newbie FAQ</a> answers the most 
    common technical questions asked by first-timer Struts developers. 
    </li>
    <li>
    The <a href="./faqs/helping.html">How to Help FAQ</a> answers the most 
    common questions about contributing to the Jakarta-Struts project. 
    </li>
    </ul>

    <p id="howtos">
    The <strong>Howto Guides</strong> are designed to help you get started with some of 
    the optional extensions and components available for Struts. 
    These include topics like using the Secure Socket Layer (SSL) protocol 
    with Struts and how to unit test your Struts applications. 
    </p>

    <p>
        The <a href="http://wiki.apache.org/struts"><strong>Struts Wiki</strong></a> is a
        relatively new addition to the Struts documentation.
        All members of the Struts Community are invited to post comments to the Wiki, as well as the User List.
        The Wiki is best suited for threads that you think are of lasting importance, while the mailing lists are best
        suited for incidental questions.
    </p>

    <p>
        If you have any comments on the pages you see here, they can be posted to the Wiki by following the link on the
        bottom of any page.
    </p>

    <p>
        For more help, you might try the JGuru Struts knowledgebase at the <a href="http://jguru.com/faq/Struts">JGuru
        FAQ</a> and <a href="http://jguru.com/forums/Struts">Forum</a>.

    </p>
    <p>
    Of course, the only true documentation is the code itself. 
    If you have any questions about how Struts actually works, do not hesitate 
    to <em>use the source</em>. 
    For the complete, buildable source code to the entire Struts framework, 
    see the "src" folder in
    <a href="http://jakarta.apache.org/site/sourceindex.html"><strong>your source 
    distribution</strong></a>.
    </p>

</section>

<section name="Struts by Example" href="Examples">

    <p>
        To help you see how it all fits together, several example applications are bundled with the Struts
        distribution:
    </p>

    <ul>
        <li>
            Blank - A simple template for starting new Struts applications.</li>
        <li>
            Exercise-Taglib - A set of test pages that also demonstrate use of the custom tags.</li>
        <li>
            Documentation - The Struts documentation bundle, as seen on the website.</li>
        <li>
            <strong>MailReader</strong> - The original Struts example application. <em>Try me first!</em></li>
        <li>
            Tiles-Doc - Extensive demonstration of Tiles extension.</li>
        <li>
            Upload - Demonstrates using the file upload facilities. (Based on Commons Upload.)</li>
        <li>
            Validator - Demonstrates using the Validator extension.</li>
    </ul>

    <p>
        These applications are provided as standalone WARs in the binary distribution.
        The source code for each application is available under <code>WEB-INF/src</code> in the binaries and under the
        <code>web</code> package in the source distribution.
    </p>

    <p>
        There are also many third-party example applications available for study, including these:
    </p>

    <ul>
        <li>
            <a href="http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse">AppFuse</a> - Demonstrates using XDoclet with
            Struts, along with different security packages and Hibernate for database persistence.
        </li>
        <li>
            <a href="http://www.ibatis.com/jpetstore/jpetstore.html">JPetStore</a> - A streamlined version of the Java
            Petstore application implemented with Struts and iBATIS database layer.
        </li>
        <li>
           <a href="http://www.codeczar.com/products/logweb/index.html">LogWeb</a> - A Struts webapp for configuring
            Log4J at runtime within a servlet container.
        </li>
    </ul>

</section>

<section name="Learning More About Struts" href="More">
    <p>
    The Struts <a href="using.html#Lists">Mailing Lists</a> are a treasure trove of 
    useful, interactive information. The user list tends to carry a high 
    volume, so always check the published documentation and the
    <a href="http://mail-archives.apache.org/eyebrowse/SummarizeList?listId=42">
    <strong>MAILING LIST ARCHIVE</strong></a> before 
    <a href="http://www.catb.org/~esr/faqs/smart-questions.html">posting a
    new question</a>.
    Like as not, it's already been asked and answered.
    </p>

    <p>
    If you really can't find the answer to your question in the 
    <a href="#faqs">FAQs</a> or
    <a href="http://mail-archives.apache.org/eyebrowse/SummarizeList?listId=42">
    list archive</a>, you can post your query to the Struts User list -- 
    <strong>BUT YOU MUST SUBSCRIBE TO THE 
    <a href="mailto:struts-user-subscribe@jakarta.apache.org">USER LIST</a>
    OR THE <a href="mailto:struts-user-digest-subscribe@jakarta.apache.org">
    USER LIST DIGEST</a> BEFORE POSTING</strong>. </p>

    <p>
        Please note that the Struts User list enjoys a "casual friday" policy. 
        More off-topic  messages are tolerated on Fridays so long as the 
        message is prefixed with the token [FRIDAY]. 
        If you'd rather not be troubled by these postings, please set your 
        mail filter accordingly. 
        Posting [FRIDAY] articles on any other weekday is <strong>strongly 
        discouraged</strong>. 
        We thank you for your cooperation.
    </p>

    <p>
        The Struts <a href="http://wiki.apache.org/struts"><strong>Wiki</strong></a> is a relatively
        new addition to our documentation.
        Any member of the community (that means you!) is invited to post new material to the Wiki.
        However, the Wiki is not the place to ask incidental questions.
        <strong>All support questions should be directed to the <a href="using.html#Lists">Struts User list</a> or
        other support forum</strong>.
    </p>

    <p>
        There is also a set of Wiki pages devoted to comments on the documentation.
        To comment on the documentation, follow the "Comments?" link at the bottom of any page.
    </p>

    <p>
    The <a href="status.html#roadmap"><strong>Roadmap</strong></a> page outlines our tentative plans for future development.
    </p>

</section>

    <section name="Struts Community Resources" href="resources">

    <p>
        Struts has attracted a large and robust community of developers.
        Some of these developers have a created an independant SourceForge site to promote new extensions to the Struts framework.
        As a service to our community, the Struts SourceForge site maintains an
        <a href="http://struts.sf.net/community/index.html">extensive directory of Struts resources</a>. including.
    </p>

    <ul>
        <li>
            <a href="http://struts.sf.net/community/articles.html">articles</a>,
        </li>

    <li>
        <a href="http://struts.sf.net/community/books.html">books</a>,
    </li>

        <li>
            <a href="http://struts.sf.net/community/examples.html">sample applications</a>,
        </li>

        <li>
            <a href="http://struts.sf.net/community/tutorials.html">tutorials</a>, and more!
        </li>

    </ul>

</section>

    <section name="Books about Struts" href="books">

       <p>
       The Apache Software Foundation does not provide printed manuals,
       but several third-party books about Struts are available.
       A current list of books about Struts is maintained by the
       <a href="http://struts.sf.net/community/index.html">Struts Community Resources area</a>.
       </p>

    </section>

    <section>
        <p class="right">
        Next: <a href="acquiring.html">Acquiring Struts</a>
        </p>
    </section>

</body>
</document>
