<?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
-->
<faqs title="Kickstart FAQ">

    <part>
        <p>
            Here are answers to the some of the usual Apache Struts
            getting-started questions.
        </p>
    </part>

    <part>
        <title>Product Line</title>
        <faq id="shale">
            <question>Why are you offering both Struts Shale and Struts Action
                Framework? Don't they compete for new development?</question>
            <answer>
                <p>We do offer Apache Struts developers a choice, but, hey,
                    choice is good. :)</p>
                <p>People who want to create and maintain the
                    <a href="announce.html#a20051214.4">Struts Action
                        Framework</a>
                    are welcome to do so.
                </p>
                <p>People who want to create and maintain the
                    <a href="announce.html#a20051214.2">Struts Shale
                        Framework</a>
                    are equally welcome.
                </p>
                <p>As a volunteer organization, we are not constrained by the
                    economics of competition. All we need are volunteers who
                    are ready, willing, and able to do the work. So long as we
                    have volunteers, we have work for them to do.</p>
                <p>Right now, we have volunteers who want to leverage the new
                    JavaServer Faces framework by using Struts Shale for new
                    development. We also have volunteers who prefer to
                    leverage their existing investment in Struts Action
                    Framework. All are welcome.</p>
                <p>For more about volunteering, visit our
                    <a href="http://struts.apache.org/faqs/helping.html">how
                        to help page</a>
                    .
                </p>
            </answer>
        </faq>

        <faq id="fork">
            <question>Is Struts Shale a fork?</question>
            <answer>
                <p>No. It's an entirely new product with its own architecture.
                    Shale is to JavaServer Faces what Action is to JavaServer
                    Pages.
                </p>
                <p>Both frameworks will have a home here so long as there are
                    volunteers ready to contribute.</p>
                <p>We encourage you to choose the framework that works best
                    for you.</p>
            </answer>
        </faq>

        <faq id="struts">
            <question>If Shale is a new product, why is it called
                Struts?</question>
            <answer>
                <p>
                    Apache Struts embraces standards, and JavaServer Faces
                    (JSF) is a new standard.
                    JSF is not the first standard that Struts has assimilated
                    (and, undoubtedly, it will not be the last).
                </p>
                <p>
                    For example, many of the original Struts taglibs overlap
                    with the JavaServer Pages Standard Tag Library (JSTL).
                    Some of us want to continue using the original tags.
                    Others want to be able to use JSTL as much as possible.
                    As a result, David Karr created the Struts EL taglibs.
                    The Struts EL subproject provides JSTL versions of only
                    the Struts tags that do not overlap with JSTL.
                    Meanwhile, the original taglibs are available and
                    maintained for those that choose to use them.
                </p>
                <p>
                    Likewise, some of us want to use JSF as much as possible.
                    Others want to continue using the original Action
                    framework.
                    As a result, Craig McClanahan created the Struts Shale
                    framework.
                    Shale provides the same utility as the Action framework by
                    building on the JSF feature set.
                    Since Shale does for JSF what Action does for JSP, we
                    consider Shale to be another Struts framework.
                </p>
            </answer>
        </faq>

        <faq id="ti">
        <question>What about Ti? What about WebWork?</question>
        <answer>
        <p>
            <a href="http://wiki.apache.org/struts/StrutsTi">Struts
                Ti</a>
            (short for Titanium) is a codename for Struts Action
            Framework 2.x.
            In late November 2005, the Ti proposal was amended to
            include a merger with
            <a href="http://www.opensymphony.com/webwork/">Open
                Symphony WebWork</a>
            .
            Under this plan, the next stable release of WebWork is
            being donated to Apache Struts,
            and the lead WebWork committers are joining the Struts
            community.
            The WebWork codebase is being brought into the ASF through
            the Apache Incubator.
            Once licensing and related issues are resolved,
            the codebase will be made part of the Apache Struts
            framework.
        </p>
        <p>
            WebWork started as a
            <a href="http://incubator.apache.org/learn/rules-for-revolutionaries.html">
                Struts Revolution</a>
            .
            Over the years, it has evolved into a superb action-based
            framework that retains many Struts 1.x paradigms.
        </p>
        <p>
            People who have worked with both Struts 1.x and WebWork
            2.x tend to agree that it is a logical candidate for
            Struts Action Framework 2.x.
            If you look the Struts Action 1.x roadmap and the WebWork
            2.x feature set,
            you'll see that WebWork has already does most of what we
            wanted Struts Action to do.
            If we finished the roadmap ourselves, Struts Action would
            end up as a WebWork workalike.
            Rather than reinvent the wheel,
            Ti has become a proposal to put the WebWork wheel back on
            the Struts axle.
        </p>
        </answer>
        </faq>

        <faq id="xwork">
            <question>What about other Open Symphony products, like
                XWork?</question>
            <answer>

                <p>
                    For the time being, there is no plan to migrate XWork to
                    the ASF. Struts Action has always had many dependencies on external
                    packages.So long as packages like XWork and Sitemesh are doing well
                    at OpenSymphony, there is no reason to make further changes.
                </p>
            </answer>
        </faq>

        <faq id="migrate">
            <question>Will it be difficult to migration from Action 1 to
                Action 2?</question>
            <answer>
                <p>
                    Many of us have significant Struts Action 1.x
                    applications in production.
                    Being able to migrate both applications and developer
                    skill sets is important to all of us.
                </p>
                <p>
                    Several
                    <a href="http://wiki.apache.org/struts/MigrationStrategy">
                        migration strategies</a>
                    are being developed.
                </p>
            </answer>
        </faq>

        <faq id="ti2">
            <question>Does Ti mean there will be three frameworks?</question>
            <answer name="Does Ti mean there will be three frameworks?">
                <p>
                    There will be the
                    <strong>Action 1</strong>
                    framework that is currently
                    in production and usually refered to as "Struts".
                    When released, Ti will become the
                    <strong>></strong>
                    Action 2 framework.
                    Shale will remain a separate but equal framework
                    that focuses on JavaServer Faces rather than
                    conventional server pages.
                </p>
            </answer>
        </faq>

        <faq id="overdrive">
            <question>What about OverDrive or Struts Nexus?</question>
            <answer>
                <p>
                    <a href="http://wiki.apache.org/struts/StrutsOverDrive">
                        OverDrive</a>
                    is a working proposal to use a set of case-study
                    applications
                    to drive the design and creation of a business layer
                    framework.
                    The codename for the business layer framework under
                    development is "Nexus".
                    Like Action and Shale, the Nexus internals are based on
                    the Chain of Responsibility pattern.
                </p>
                <p>
                    OverDrive and Nexus do not complete with frameworks like
                    Action and Shale.
                    Nexus begins where these frameworks end.
                    Nexus is the "rest of the stack".
                </p>
                <p>
                    The codebase underlying the proposal is being coded in C#,
                    but a version for Java is expected in due course.
                </p>
            </answer>
        </faq>

        <faq id="action">
            <question>What's the difference between Struts Action Framework
                and Struts Classic?</question>
            <answer>
                <p>For the Struts Action Framework 1.3.x series, we subdivided
                    the monolithic Struts 1.2.x distribution into several
                    discrete subprojects. Struts Classic is a codename for the
                    work we needed to do to create and release the new
                    subprojects.</p>
            </answer>
        </faq>
    </part>

    <part>
        <title>Project Details</title>

        <faq id="struts">
            <question>Why is the project called Struts?</question>
            <answer>
                <p>It's a reference to struts in the architectural sense, a
                    reminder of the nearly invisible pieces that hold up
                    buildings, houses, and bridges.</p>
            </answer>
        </faq>

        <faq id="license">
            <question>How is Apache Struts licensed?</question>
            <answer>
                <p>All Apache Struts products are copyrighted software
                    available under the
                    <a href="http://www.apache.org/licenses">Apache
                        License</a>
                    , a &quot;free-to-use, business-friendly license&quot;.
                </p>
            </answer>
        </faq>

        <faq id="usage">
            <question>Can Apache Struts be used in a commercial
                product?</question>
            <answer>
                <p>Yes. The only requirements you must meet are those listed
                    in the
                    <a href="http://www.apache.org/licenses">Apache
                        License</a>
                    .
                </p>
            </answer>
        </faq>

        <faq id="credits">
            <question>Do I have to credit Apache Struts on my own
                website?</question>
            <answer>
                <p>You need to credit Apache Struts if you
                    <strong>redistribute your own framework</strong>
                    based on our products
                    for other people to use. (See the
                    <a href="http://www.apache.org/LICENSE">Apache License</a>
                    for details.)
                    But you do
                    <strong>not</strong>
                    need to credit Apache Struts just because your web
                    application utilizes one of our products.
                    It's the same situation as using the Apache HTTPD server
                    or Tomcat. Not required if its just running your web site.
                    Required if you've used the source code to create your own
                    server that you are redistributing to other people.
                </p>
            </answer>
        </faq>

        <faq id="requests">
            <question>If a product doesn't do what I want, can I request that
                a feature be added?</question>
            <answer>
                <p>
                    First, it's important to remember that Apache Struts is an
                    all-volunteer project.
                    We don't charge anyone anything to use Apache Struts
                    products.
                    Committers and other developers work on Apache Struts
                    products because they need to use it with their own
                    applications.
                    If others can use it too, that's "icing on the cake".
                    If you
                    <a href="../helping.html">submit a patch</a>
                    for a feature that a Committer finds useful, then that
                    Committer may choose to volunteer his or her time to apply
                    the patch.
                    If you just submit an idea without a patch, it is much
                    less likely to be added (since first someone else has to
                    volunteer their time to write the patch).
                </p>
                <p>
                    We are grateful for any patches, and we welcome new ideas,
                    but the best way to see that something gets added to the
                    framework is to do as much of the work as you can, rather
                    than rely on the "kindness of strangers". Worst case, you
                    can apply the patch to your copy of Struts and still use
                    the feature in your own application. (Which is what open
                    source is ~really~ all about.)
                </p>
            </answer>
        </faq>

        <faq id="help">
            <question>Where can I get help with Apache Struts?</question>
            <answer>
                <p>Struts Action Framework comes complete with a
                    <a href="../userGuide/index.html">Users Guide</a>
                    to
                    introduce people to the framework and its underlying
                    technologies. Various components
                    also have their own in-depth Developers Guide, to cover
                    more advanced topics. Comprehensive
                    <a href="../api/index.html">Javadocs</a>
                    are included
                    along with the
                    <strong>full source code</strong>
                    .
                </p>
                <p>
                    The
                    <a href="http://struts.apache.org/mail.html">Struts user
                        mailing list</a>
                    is also
                    very active, and welcomes posts from new users. Before
                    posting a new question, be
                    sure to consult the
                    <a href="http://struts.apache.org/mail.html#Archives">
                        <strong>MAILING LIST ARCHIVE</strong>
                    </a>
                    and the very excellent
                    <a href="http://www.catb.org/~esr/faqs/smart-questions.html">
                        How To Ask Questions The Smart Way</a>
                    by Eric Raymond. Please do be sure
                    to
                    <a href="http://expita.com/nomime.html">turn off HTML</a>
                    in your
                    email client before posting.
                </p>
            </answer>
        </faq>

        <faq id="support">
            <question>Is commercial support available?</question>
            <answer>
                <p>The Apache Software Foundation does not provide commercial
                    support for any of our software products, including Apache
                    Struts products.
                    However, third parties may offer different degrees of
                    support.</p>
            </answer>
        </faq>

        <faq id="providers">
            <question>Are there ISPs that will host my Struts
                application?</question>
            <answer>
                <p>For a listing of some Java and Struts Action Framework
                    ISPs, visit the
                    <a href="http://struts.sf.net/community/index.html">Struts
                        Community Resources</a>
                    area on SourceForge.
                </p>
            </answer>
        </faq>

        <faq id="ide">
            <question>Is there a particularly good IDE to use with Struts
                Action Framework"</question>
            <answer>
                <p>
                    Struts should work well with any development environment
                    that you would like to use, as well as with any
                    programmers editor.
                    The members of the Struts development team each use their
                    own tools such as
                    <a href="http://www.gnu.org/software/emacs/emacs.html">
                        Emacs</a>
                    ,
                    <a href="http://www.intellij.com/idea/">IDEA</a>
                    ,
                    <a href="http://www.eclipse.org/">Eclipse</a>
                    ,
                    and
                    <a href="http://www.netbeans.org/">NetBeans</a>
                    .
                </p>
                <p>
                    See the
                    <a href="../faqs/index.html">Howto Guides</a>
                    for more about configuring IDEs to work with Struts.
                </p>
            </answer>
        </faq>

        <faq id="digest">
            <question>Is there a digest for the User list?</question>
            <answer>
                <p>
                    Yes.
                    <a href="mailto:user-digest-subscribe@struts.apache.org">
                        send a blank message</a>
                    to &lt;
                    <a href="mailto:user-digest-subscribe@struts.apache.org">
                        user-digest-subscribe@struts.apache.org</a>
                    &gt;.
                </p>
                <p>
                    If you are subscribed to the digest, you can also post to
                    the list.
                    Just be sure to send your post to the
                    <a href="mailto:user@struts.apache.org">user list</a>
                    rather than trying to reply to the digest.
                </p>
            </answer>
        </faq>

        <faq id="newsgroup">
            <question>Is there an Apache Struts newsgroup?</question>
            <answer>
                <p>
                    Not a usenet group, but the Struts User list can be
                    accessed with your
                    favorite newsgroup reader from the
                    <a href="http://news.gmane.org/">GMane News Site</a>
                    . Subscribe to groups
                    <code>gmane.comp.jakarta.struts.devel</code>
                    for the developer list, or
                    <code>gmane.comp.jakarta.struts.user</code>
                    for the user list.
                </p>
            </answer>
        </faq>

        <faq id="mailbounce">
            <question>Why didn't my posting show up on the user
                list?</question>
            <answer>
                <p>
                    You must be subscribed to the
                    <a href="mailto:user-subscribe@struts.apache.org">user
                        list</a>
                    or
                    <a href="mailto:user-digest-subscribe@struts.apache.org">
                        user digest</a>
                    before posting
                    (or use the
                    <a href="http://news.gmane.org">GMane Newsgroups</a>
                    instead).
                </p>
            </answer>
        </faq>

        <faq id="unsubscribe">
            <question>How do I unsubscribe from the mailing list?</question>
            <answer>
                <p>
                    <strong>From the email account used to subscribe to the
                        list,</strong>
                    <a href="mailto:user-unsubscribe@struts.apache.org">send a
                        blank message</a>
                    to &lt;
                    <a href="mailto:user-unsubscribe@struts.apache.org">
                        user-unsubscribe@struts.apache.org</a>
                    &gt;.
                </p>
                <p>
                    If you are receiving the digest, you must send a blank
                    email to
                    &lt;
                    <a href="mailto:user-digest-unsubscribe@struts.apache.org">
                        user-unsubscribe@struts.apache.org</a>
                    &gt;
                    instead.
                </p>
            </answer>
        </faq>
    </part>

    <part>
        <p class="right">
            <strong>Next:</strong>
            <a href="helping.html">How to Help FAQ</a>
        </p>
    </part>

</faqs>
