<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
  <meta http-equiv="Content-Language" content="en"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title>Kickstart FAQ</title>

  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
  <link href="/css/main.css" rel="stylesheet">
  <link href="/css/custom.css" rel="stylesheet">
  <link href="/css/syntax.css" rel="stylesheet">

  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
  <script type="text/javascript" src="/js/community.js"></script>

  <!-- Matomo -->
  <script>
    var _paq = window._paq = window._paq || [];
    /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
    /* We explicitly disable cookie tracking to avoid privacy issues */
    _paq.push(['disableCookies']);
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    (function() {
      var u="//analytics.apache.org/";
      _paq.push(['setTrackerUrl', u+'matomo.php']);
      _paq.push(['setSiteId', '41']);
      var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
    })();
  </script>
  <!-- End Matomo Code -->
</head>
<body>

<a href="https://github.com/apache/struts" class="github-ribbon">
  <img decoding="async" loading="lazy" style="position: absolute; right: 0; border: 0;" width="149" height="149" src="https://github.blog/wp-content/uploads/2008/12/forkme_right_red_aa0000.png?resize=149%2C149" class="attachment-full size-full" alt="Fork me on GitHub" data-recalc-dims="1">
</a>

<header>
  <nav>
    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
            Menu
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
        </div>
        <div id="struts-menu" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Home<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/index.html">Welcome</a></li>
                <li><a href="/download.cgi">Download</a></li>
                <li><a href="/releases.html">Releases</a></li>
                <li><a href="/announce-2024.html">Announcements</a></li>
                <li><a href="http://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Support<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/mail.html">User Mailing List</a></li>
                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
                <li><a href="/security.html">Reporting Security Issues</a></li>
                <li><a href="/commercial-support.html">Commercial Support</a></li>
                <li class="divider"></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
                <li class="divider"></li>
                <li><a href="/maven/project-info.html">Maven Project Info</a></li>
                <li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
                <li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Documentation<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/birdseye.html">Birds Eye</a></li>
                <li><a href="/primer.html">Key Technologies</a></li>
                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
                <li class="divider"></li>
                <li><a href="/getting-started/">Getting Started</a></li>
                <li><a href="/security/">Security Guide</a></li>
                <li><a href="/core-developers/">Core Developers Guide</a></li>
                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
                <li><a href="/plugins/">Plugins</a></li>
                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
                <li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Contributing<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/youatstruts.html">You at Struts</a></li>
                <li><a href="/helping.html">How to Help FAQ</a></li>
                <li><a href="/dev-mail.html">Development Lists</a></li>
                <li class="divider"></li>
                <li><a href="/submitting-patches.html">Submitting patches</a></li>
                <li><a href="/builds.html">Source Code and Builds</a></li>
                <li><a href="/coding-standards.html">Coding standards</a></li>
                <li><a href="/contributors/">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/release-guidelines.html">Release Guidelines</a></li>
                <li><a href="/bylaws.html">PMC Charter</a></li>
                <li><a href="/volunteers.html">Volunteers</a></li>
                <li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
                <li><a href="/updating-website.html">Updating the website</a></li>
              </ul>
            </li>
            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
          </ul>
        </div>
      </div>
    </div>
  </nav>
</header>


<article class="container">
  <section class="col-md-12">
    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/kickstart.md" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <h1 class="no_toc" id="kickstart-faq">Kickstart FAQ</h1>

<ul id="markdown-toc">
  <li><a href="#general" id="markdown-toc-general">General</a>    <ul>
      <li><a href="#im-new-to-apache-struts-how-do-i-get-started" id="markdown-toc-im-new-to-apache-struts-how-do-i-get-started">I’m new to Apache Struts. How do I get started?</a></li>
      <li><a href="#releases" id="markdown-toc-releases">Looking at the releases page, some versions seem to be missing. What happened to them?</a></li>
      <li><a href="#why-is-the-project-called-struts" id="markdown-toc-why-is-the-project-called-struts">Why is the project called “Struts”?</a></li>
      <li><a href="#how-is-apache-struts-licensed" id="markdown-toc-how-is-apache-struts-licensed">How is Apache Struts licensed?</a></li>
      <li><a href="#can-apache-struts-be-used-in-a-commercial-product" id="markdown-toc-can-apache-struts-be-used-in-a-commercial-product">Can Apache Struts be used in a commercial product?</a></li>
      <li><a href="#do-i-have-to-credit-apache-struts-on-my-own-web-site" id="markdown-toc-do-i-have-to-credit-apache-struts-on-my-own-web-site">Do I have to credit Apache Struts on my own web site?</a></li>
      <li><a href="#are-there-isps-that-will-host-my-java-web-application" id="markdown-toc-are-there-isps-that-will-host-my-java-web-application">Are there ISPs that will host my Java web application?</a></li>
      <li><a href="#is-there-a-particularly-good-ide-to-use" id="markdown-toc-is-there-a-particularly-good-ide-to-use">Is there a particularly good IDE to use?</a></li>
    </ul>
  </li>
  <li><a href="#product-support" id="markdown-toc-product-support">Product Support</a>    <ul>
      <li><a href="#where-can-i-get-help-with-apache-struts" id="markdown-toc-where-can-i-get-help-with-apache-struts">Where can I get help with Apache Struts?</a></li>
      <li><a href="#is-commercial-support-available" id="markdown-toc-is-commercial-support-available">Is commercial support available?</a></li>
      <li><a href="#if-a-product-doesnt-do-what-i-want-can-i-request-that-a-feature-be-added" id="markdown-toc-if-a-product-doesnt-do-what-i-want-can-i-request-that-a-feature-be-added">If a product doesn’t do what I want, can I request that a feature be added?</a></li>
      <li><a href="#is-there-a-press-kit-for-apache-struts" id="markdown-toc-is-there-a-press-kit-for-apache-struts">Is there a press kit for Apache Struts?</a></li>
      <li><a href="#where-can-i-report-a-potential-security-vulnerability" id="markdown-toc-where-can-i-report-a-potential-security-vulnerability">Where can I report a potential security vulnerability?</a></li>
    </ul>
  </li>
  <li><a href="#mailing-lists" id="markdown-toc-mailing-lists">Mailing Lists</a>    <ul>
      <li><a href="#is-there-a-digest-for-the-user-list" id="markdown-toc-is-there-a-digest-for-the-user-list">Is there a digest for the User list?</a></li>
      <li><a href="#is-there-an-apache-struts-newsgroup" id="markdown-toc-is-there-an-apache-struts-newsgroup">Is there an Apache Struts newsgroup?</a></li>
      <li><a href="#why-didnt-my-posting-show-up-on-the-user-list" id="markdown-toc-why-didnt-my-posting-show-up-on-the-user-list">Why didn’t my posting show up on the user list?</a></li>
      <li><a href="#are-there-separate-user-lists-for-struts-1-and-struts-2" id="markdown-toc-are-there-separate-user-lists-for-struts-1-and-struts-2">Are there separate user lists for Struts 1 and Struts 2?</a></li>
      <li><a href="#how-do-i-unsubscribe-from-the-mailing-list" id="markdown-toc-how-do-i-unsubscribe-from-the-mailing-list">How do I unsubscribe from the mailing list?</a></li>
    </ul>
  </li>
</ul>

<h2 id="general">General</h2>

<h3 id="im-new-to-apache-struts-how-do-i-get-started">I’m new to Apache Struts. How do I get started?</h3>

<p>The best place to start is with the “best available” <a href="releases">release</a>.
If you are new to Java or web development, as well as Apache Struts, be sure to review the
<a href="primer">Key Technologies Primer</a>.</p>

<p>The main Struts web site includes documentation for the latest “General Availability” release
in each major release series. The development section of the site inclues draft documentation
for upcoming releases. If you are just getting started, focus on the latest General
Availability release, Documentation for past <a href="releases">releases</a> is also available.</p>

<p>If you have questions, you can search the <a href="mail.html#archives">User Mailing List archives</a>,
or <a href="mail">post your own question to the list</a>. (Plain old Google usually works too!)</p>

<h3 id="releases">Looking at the releases page, some versions seem to be missing. What happened to them?</h3>

<p>Apache Struts uses a “milestone build” system to create releases. First, we create a build
with a milestone version number, like Struts 2.0.42, and post the distribution in the development area.
The development group tests the distribution, and then we decide whether or not to release it.
The distribution includes everything that would be released, including the documentation and the release notes
for this version.</p>

<p>If we find a significant problem with the distribution, we may decide not to release it, and just leave
the distribution as a “test build”. The testing may take several days, and in the meantime, we want to keep
the project moving, and so we just go onto the next version number.
Using our example, the next distribution would be labeled 2.0.43, even if version 2.0.42 was never officially
released.</p>

<p>Often we will first grade a release as a “beta”, and invite other users to test it too. If this second
round of beta testing goes well, then we may mark the release “General Availability”.
Usually, that designation would also make it the new “Best Available” release. In this case, we don’t create
another distribution, but simply adjust the status of the same set of bits that people have been testing all along.</p>

<p>In practice, the milestone build system is fast and efficient and creates the fewest number of “candidate builds”
between releases.</p>

<h3 id="why-is-the-project-called-struts">Why is the project called “Struts”?</h3>

<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>

<h3 id="how-is-apache-struts-licensed">How is Apache Struts licensed?</h3>

<p>All Apache Struts products are copyrighted software available under the <a href="http://www.apache.org/licenses">Apache License</a>,
a "free-to-use, business-friendly license".</p>

<h3 id="can-apache-struts-be-used-in-a-commercial-product">Can Apache Struts be used in a commercial product?</h3>

<p>Yes. The only requirements you must meet are those listed in the <a href="http://www.apache.org/licenses">Apache License</a>.</p>

<h3 id="do-i-have-to-credit-apache-struts-on-my-own-web-site">Do I have to credit Apache Struts on my own web site?</h3>

<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>

<h3 id="are-there-isps-that-will-host-my-java-web-application">Are there ISPs that will host my Java web application?</h3>

<p>For a listing of some Java and Struts ISPs, visit the <a href="http://struts.sf.net/community/index">Struts Community Resources</a>
area on SourceForge.</p>

<h3 id="is-there-a-particularly-good-ide-to-use">Is there a particularly good IDE to use?</h3>

<p>The frameworks should work well with any development environment that you would like to use, as well as with any
programmers editor. The members of the Apache Struts development group each use their own tools such as
<a href="http://www.gnu.org/software/emacs/emacs">Emacs</a>, <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>,
<a href="http://www.eclipse.org/">Eclipse</a>, and <a href="http://www.netbeans.org/">NetBeans</a>.</p>

<p>For more, see the <a href="http://wiki.apache.org/struts/StrutsMyFavoriteIDE">IDE discussion page</a> in the Struts wiki.</p>

<h2 id="product-support">Product Support</h2>

<h3 id="where-can-i-get-help-with-apache-struts">Where can I get help with Apache Struts?</h3>

<p>Each release of Struts comes with a User Guide or set of Tutorials 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 Javadocs are provided for each release, along with the <strong>full source code</strong>.</p>

<p>The <a href="mail">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 <strong><a href="mail.html#Archives">MAILING LIST ARCHIVE</a></strong>
and the very excellent <a href="http://www.catb.org/~esr/faqs/smart-questions">How To Ask Questions The Smart Way</a>
by Eric Raymond. Please do be sure to <a href="http://expita.com/nomime">turn off HTML</a> in your
email client before posting.</p>

<h3 id="is-commercial-support-available">Is commercial support available?</h3>

<p>The Apache Software Foundation does not provide commercial support for any of our software products,
including Apache Struts. However, third parties may offer different degrees of support.</p>

<h3 id="if-a-product-doesnt-do-what-i-want-can-i-request-that-a-feature-be-added">If a product doesn’t do what I want, can I request that a feature be added?</h3>

<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">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 the framework and still use the feature in your own application.
(Which is what open source is <em>really</em> all about.)</p>

<h3 id="is-there-a-press-kit-for-apache-struts">Is there a press kit for Apache Struts?</h3>

<p>Except for our <a href="announce">announcements page</a>, there is not a formal press or media kit for Apache Struts.
Queries from the press (and ONLY queries from the press, NOT support questions or anything else!)
should go to our media relations address: <a href="mailto:press@apache.org">press@apache.org</a>.</p>

<h3 id="where-can-i-report-a-potential-security-vulnerability">Where can I report a potential security vulnerability?</h3>

<p>If you believe you’ve found a security vulnerability in Apache Struts, please contact our security address - any
emails not relating to security vulnerabilities will be ignored without a reply (all security related information
will be kept confidential unless otherwise indicated): <a href="mailto:security@struts.apache.org">security@struts.apache.org</a>.</p>

<h2 id="mailing-lists">Mailing Lists</h2>

<h3 id="is-there-a-digest-for-the-user-list">Is there a digest for the User list?</h3>

<p>Yes. Send a blank message to <a href="mailto:user-digest-subscribe@struts.apache.org">user-digest-subscribe@struts.apache.org</a>.</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>

<h3 id="is-there-an-apache-struts-newsgroup">Is there an Apache Struts newsgroup?</h3>

<p>Not a usenet group, but the Apache 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 class="language-plaintext highlighter-rouge">gmane.comp.jakarta.struts.user</code>
for the user list.</p>

<h3 id="why-didnt-my-posting-show-up-on-the-user-list">Why didn’t my posting show up on the user list?</h3>

<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>

<h3 id="are-there-separate-user-lists-for-struts-1-and-struts-2">Are there separate user lists for Struts 1 and Struts 2?</h3>

<p>No. Each major version has it’s own JIRA project, but we share the mailing lists.</p>

<p>To get the best response to an inquiry, please specify which version of Struts is being used,
including the milestone (“Struts 1.2.9”, for example). You can also include the label <strong>[s1]</strong>
or <strong>[s2]</strong> in the subject line of your post.</p>

<h3 id="how-do-i-unsubscribe-from-the-mailing-list">How do I unsubscribe from the mailing list?</h3>

<p><strong>From the email account used to subscribe to the list</strong>, send a blank message to
<a href="mailto:user-unsubscribe@struts.apache.org">user-unsubscribe@struts.apache.org</a>.</p>

<p>If you are receiving the digest, you must send a blank email to
<a href="mailto:user-digest-unsubscribe@struts.apache.org">user-digest-unsubscribe@struts.apache.org</a> instead.</p>

  </section>
</article>


<footer class="container">
  <div class="col-md-12">
    Copyright &copy; 2000-2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
    trademarks of The Apache Software Foundation. All Rights Reserved.
  </div>
  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>

<script>!function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (!d.getElementById(id)) {
    js = d.createElement(s);
    js.id = id;
    js.src = "//platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs);
  }
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>

<div id="fb-root"></div>

<script>(function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s);
  js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


</body>
</html>
