blob: 38ca8715b0a1cfd68e4b0ab36cab7607e3eb4b3d [file] [log] [blame]
<!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>