<!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>From a birds eye</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="/highlighter/github-theme.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>
</head>
<body>

<a href="http://github.com/apache/struts" class="github-ribbon">
  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</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-2021.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>
              </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 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><a href="/contributors/">Contributors Guide</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="https://cwiki.apache.org/confluence/display/WW/Contributors+Guide">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/birdseye.md" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <h1 class="no_toc" id="from-a-birds-eye">From a birds eye</h1>

<ul id="markdown-toc">
  <li><a href="#the-apache-struts-web-framework" id="markdown-toc-the-apache-struts-web-framework">The Apache Struts web framework</a></li>
  <li><a href="#the-apache-struts-project" id="markdown-toc-the-apache-struts-project">The Apache Struts Project</a></li>
  <li><a href="#why-should-you-use-apache-struts" id="markdown-toc-why-should-you-use-apache-struts">Why should you use Apache Struts?</a></li>
</ul>

<h2 id="the-apache-struts-web-framework">The Apache Struts web framework</h2>

<p>The Apache Struts web framework is a free open-source solution for
creating Java web applications.</p>

<p>Web applications differ from conventional websites in that web applications
can create a dynamic response. Many websites deliver only static pages.
A web application can interact with databases and business logic engines
to customize a response.</p>

<p>Web applications based on JavaServer Pages sometimes commingle database
code, page design code, and control flow code. In practice, we find that
unless these concerns are separated, larger applications become
difficult to maintain.</p>

<p>One way to separate concerns in a software application is to use a
Model-View-Controller (MVC) architecture. The Model represents the business or
database code, the View represents the page design code, and the Controller
represents the navigational code. The Struts framework is designed to help
developers create web applications that utilize a MVC architecture.</p>

<p>The framework provides three key components:</p>

<p>A “request” handler provided by the application developer that is mapped to a standard URI.
A “response” handler that transfers control to another resource which completes the response.
A tag library that helps developers create interactive form-based applications with server pages.
The framework’s architecture and tags are buzzword compliant. Struts works
well with conventional REST applications and with technologies like SOAP and AJAX.</p>

<h2 id="the-apache-struts-project">The Apache Struts Project</h2>

<p>The Apache Struts Project is the open source community that creates and maintains
the Apache Struts framework. The project consists of a diverse group of volunteers
who share common values regarding collaborative, community-based open source development.
The Apache Struts Project is proud to share these values with our parent organization:
The Apache Software Foundation.</p>

<p>The project is called “Struts” because the framework is meant to furnish the
“invisible underpinnings” that support professional application development.
Struts provides the glue that joins the various elements of the standard Java platform
into a coherent whole. Our goal is to leverage existing standards by producing the missing
pieces we need to create enterprise-grade applications that are easy to maintain over time.</p>

<p>The Apache Struts Project offered two major versions of the Struts framework. Currently we are 
only maintaining the Struts 2 version. It is recommended to upgrade all Struts 1.x application 
to Struts 2. Please do not start new application development using Struts 1.x, as we are no longer 
issuing security patches.</p>

<p>Struts 2 was originally known as WebWork 2. After working independently for several years,
the WebWork and Struts communities joined forces to create Struts 2. The 2.x framework
is the best choice for teams who value elegant solutions to difficult problems.</p>

<h2 id="why-should-you-use-apache-struts">Why should you use Apache Struts?</h2>

<p>Apache Struts is a modern, maintained and full-featured web framework. It has been there
for years and give the huge user base it is unlikely it will go away anytime soon
in the future. Not only that we have dedicated users and developers on the project.
Apache Struts is licensed to the Apache License 2.0 and this will not change. We maintain
a clean IP and you are “safe” to use the project. Sometimes you are not “safe” to use
a project when a company controls the SCM (Source Control Management). 
Access to Source Code doesn’t mean it is free.
With Apache Struts, you are not only free to “do what you want with it”, you can even
contribute (which is not always the case). And best of it: you can become a part of the
core team too.</p>

<p>It is usually very easy to integrate other technologies with Apache Struts. If you are
using an ORM like Apache Cayenne, Hibernate or JDBC you will not have any restrictions.
Apache Struts is not even tied too much to a frontend technology. In old days it was
JSP, then came Velocity and Freemarker. Nowadays you might build your web application
with just static HTML and AngularJS. Or you want to use Sitemesh or Tiles. This all
is no problem due to Struts elegant and easy to use extension mechanisms.</p>

<p>Unlike other, component oriented frameworks, we do not aim to hide the stateless nature
of the web. We think it is perfectly acceptable to build upon a Request/Response cycle.
We also think the MVC pattern is not so bad, just because it is old. In fact, we believe
the Apache Struts architecture is clean and easy to understand.</p>

<p>Of course, if you wish to build components on the server side which render on the front end
side, you are most likely wrong with Struts. This is a different approach which promises
to reduce the amount of HTML/JavaScript knowledge needed and to create reusable components for
the view layer. Projects like <a href="http://wicket.apache.org">Wicket</a> and
<a href="http://tapestry.apache.org">Tapestry</a> serve this purpose very well. As with every
framework you need to decide if it makes sense for you to build components or if
you are better with the Struts-approach.</p>


  </section>
</article>


<footer class="container">
  <div class="col-md-12">
    Copyright &copy; 2000-2018 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
    All Rights Reserved.
  </div>
  <div class="col-md-12">
    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
    trademarks of The Apache Software Foundation.
  </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>
