You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by bu...@apache.org on 2013/01/19 14:18:01 UTC
svn commit: r847285 [12/13] - in /websites/staging/struts/trunk/content: ./
css/ dev/ images/ images/profiles/ img/ js/ proposals/ uml/
Added: websites/staging/struts/trunk/content/primer.html
==============================================================================
--- websites/staging/struts/trunk/content/primer.html (added)
+++ websites/staging/struts/trunk/content/primer.html Sat Jan 19 13:17:59 2013
@@ -0,0 +1,1940 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia at Jan 19, 2013
+ | Rendered using Apache Maven Fluido Skin 1.3.0
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta name="Date-Revision-yyyymmdd" content="20130119" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>
+ Key Technologies Primer</title>
+ <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
+ <link rel="stylesheet" href="./css/site.css" />
+ <link rel="stylesheet" href="./css/print.css" media="print" />
+
+
+ <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>
+
+
+ </head>
+ <body class="topBarDisabled">
+
+
+
+
+
+
+ <a href="http://github.com/apache/struts2">
+ <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
+ src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
+ alt="Fork me on GitHub">
+ </a>
+
+
+
+
+ <div class="container-fluid">
+ <div id="banner">
+ <div class="pull-left">
+ <a href="http://www.apache.org/" id="bannerLeft">
+ <img src="http://www.apache.org/images/asf-logo.gif" alt="Apache Software Foundation"/>
+ </a>
+ </div>
+ <div class="pull-right"> <a href="../" id="bannerRight">
+ <img src="images/struts.gif" alt="Apache Struts"/>
+ </a>
+ </div>
+ <div class="clear"><hr/></div>
+ </div>
+
+ <div id="breadcrumbs">
+ <ul class="breadcrumb">
+
+
+ <li id="publishDate">Last Published: 2013-01-19</li>
+
+
+
+
+
+ <li class="pull-right"> <a href="../1.3.10/index.html" title="Struts 1">
+ Struts 1</a>
+ </li>
+
+ <li class="divider pull-right">|</li>
+
+ <li class="pull-right"> <a href="../2.3.8/index.html" title="Struts 2">
+ Struts 2</a>
+ </li>
+
+ <li class="divider pull-right">|</li>
+
+ <li class="pull-right"> <a href="http://www.apache.org/" class="externalLink" title="Apache">
+ Apache</a>
+ </li>
+
+ </ul>
+ </div>
+
+
+ <div class="row-fluid">
+ <div id="leftColumn" class="span3">
+ <div class="well sidebar-nav">
+
+
+ <ul class="nav nav-list">
+ <li class="nav-header">Apache Struts</li>
+
+ <li>
+
+ <a href="index.html" title="Welcome">
+ <i class="none"></i>
+ Welcome</a>
+ </li>
+
+ <li>
+
+ <a href="downloads.html" title="Releases">
+ <i class="none"></i>
+ Releases</a>
+ </li>
+
+ <li>
+
+ <a href="announce.html" title="Announcements">
+ <i class="none"></i>
+ Announcements</a>
+ </li>
+
+ <li>
+
+ <a href="http://www.apache.org/licenses/" class="externalLink" title="License">
+ <i class="none"></i>
+ License</a>
+ </li>
+
+ <li>
+
+ <a href="kickstart.html" title="Kickstart FAQ">
+ <i class="none"></i>
+ Kickstart FAQ</a>
+ </li>
+
+ <li>
+
+ <a href="http://people.apache.org/~vgritsenko/stats/projects/struts" class="externalLink" title="Website Stats">
+ <i class="none"></i>
+ Website Stats</a>
+ </li>
+
+ <li>
+
+ <a href="http://apache.org/foundation/thanks.html" class="externalLink" title="Thanks!">
+ <i class="none"></i>
+ Thanks!</a>
+ </li>
+
+ <li>
+
+ <a href="http://apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">
+ <i class="none"></i>
+ Sponsorship</a>
+ </li>
+ <li class="nav-header">Documentation</li>
+
+ <li class="active">
+
+ <a href="#"><i class="none"></i>Key Technologies</a>
+ </li>
+
+ <li>
+
+ <a href="../2.3.8/index.html" title="Struts 2.3.8 (GA)">
+ <i class="none"></i>
+ Struts 2.3.8 (GA)</a>
+ </li>
+
+ <li>
+
+ <a href="../1.3.10/index.html" title="Struts 1.3.10 (GA)">
+ <i class="none"></i>
+ Struts 1.3.10 (GA)</a>
+ </li>
+
+ <li>
+
+ <a href="downloads.html#PriorReleases" title="Prior Releases">
+ <i class="none"></i>
+ Prior Releases</a>
+ </li>
+ <li class="nav-header">Support</li>
+
+ <li>
+
+ <a href="mail.html" title="User Mailing List">
+ <i class="none"></i>
+ User Mailing List</a>
+ </li>
+
+ <li>
+
+ <a href="https://issues.apache.org/jira/browse/WW" class="externalLink" title="Issue Tracker (JIRA)">
+ <i class="none"></i>
+ Issue Tracker (JIRA)</a>
+ </li>
+
+ <li>
+
+ <a href="security.html" title="Reporting Security Issues">
+ <i class="none"></i>
+ Reporting Security Issues</a>
+ </li>
+ <li class="nav-header">Development</li>
+
+ <li>
+
+ <a href="../2.x/index.html" title="Struts 2.x Draft Docs">
+ <i class="none"></i>
+ Struts 2.x Draft Docs</a>
+ </li>
+
+ <li>
+
+ <a href="../1.x/index.html" title="Struts 1.x Draft Docs">
+ <i class="none"></i>
+ Struts 1.x Draft Docs</a>
+ </li>
+
+ <li>
+
+ <a href="helping.html" title="How to Help FAQ">
+ <i class="none"></i>
+ How to Help FAQ</a>
+ </li>
+
+ <li>
+
+ <a href="dev/dev-mail.html" title="Development Lists">
+ <i class="none"></i>
+ Development Lists</a>
+ </li>
+
+ <li>
+
+ <a href="dev/builds.html" title="Source Code">
+ <i class="none"></i>
+ Source Code</a>
+ </li>
+
+ <li>
+
+ <a href="dev/releases.html" title="Release Guidelines">
+ <i class="none"></i>
+ Release Guidelines</a>
+ </li>
+
+ <li>
+
+ <a href="dev/bylaws.html" title="PMC Charter">
+ <i class="none"></i>
+ PMC Charter</a>
+ </li>
+
+ <li>
+
+ <a href="dev/minutes.html" title="Minutes">
+ <i class="none"></i>
+ Minutes</a>
+ </li>
+
+ <li>
+
+ <a href="dev/volunteers.html" title="Volunteers">
+ <i class="none"></i>
+ Volunteers</a>
+ </li>
+
+ <li>
+
+ <a href="../struts-sandbox/index.html" title="Sandbox">
+ <i class="none"></i>
+ Sandbox</a>
+ </li>
+
+ <li>
+
+ <a href="http://svn.apache.org/viewvc/struts/" class="externalLink" title="Source Repository">
+ <i class="none"></i>
+ Source Repository</a>
+ </li>
+ <li class="nav-header">See Also</li>
+
+ <li>
+
+ <a href="http://www.ApacheBookstore.com/" class="externalLink" title="Apache Bookstore">
+ <i class="none"></i>
+ Apache Bookstore</a>
+ </li>
+
+ <li>
+
+ <a href="http://people.apache.org/~rubys/planet/struts/" class="externalLink" title="Our Blogs">
+ <i class="none"></i>
+ Our Blogs</a>
+ </li>
+
+ <li>
+
+ <a href="http://struts.SourceForge.net/" class="externalLink" title="Struts SourceForge">
+ <i class="none"></i>
+ Struts SourceForge</a>
+ </li>
+ </ul>
+
+
+
+ <hr class="divider" />
+
+ <div id="poweredBy">
+ <div class="clear"></div>
+ <div class="clear"></div>
+ <div class="clear"></div>
+ <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
+ <img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" />
+ </a>
+ </div>
+ </div>
+ </div>
+
+
+ <div id="bodyColumn" class="span9" >
+
+ <!-- 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 -->
+
+
+
+ <div class="section"><h2>Key Technologies Primer<a name="Key_Technologies_Primer"></a></h2>
+
+ <blockquote><p><i>
+ "The time has come," the Walrus said, "To talk of many things:
+ Of shoes -- and ships -- and sealing-wax -- Of cabbages -- and kings --
+ And why the sea is boiling hot -- And whether pigs have wings."
+ </i></p></blockquote>
+
+
+ <a name="suspects"></a>
+ <div class="section"><h3>The Usual Suspects<a name="The_Usual_Suspects"></a></h3>
+
+ <p>
+ The framework documentation is written for active web
+ developers and assumes a working
+ knowledge about how Java web applications are built.
+ Before getting started, you should
+ understand the basics of several key technologies:
+ </p>
+
+ <ul>
+ <li>
+ <a href="#http">HTTP, HTML, and User Agents</a>
+ </li>
+ <li>
+ <a href="#cycle">The HTTP Request/Response Cycle</a>
+ </li>
+ <li>
+ <a href="#javascript">JavaScript, AJAX, and SOAP</a>
+ </li>
+ <li>
+ <a href="#java">The Java Language and Application
+ Frameworks</a>
+ </li>
+ <li>
+ <a href="#javabeans">JavaBeans</a>
+ </li>
+ <li>
+ <a href="#resources">Properties Files and
+ ResourceBundles</a>
+ </li>
+ <li>
+ <a href="#containers">Servlets, Filters and Web Containers</a>
+ </li>
+ <li>
+ <a href="#jsp">JavaServer Pages and JSP Tag
+ Libraries</a>
+ </li>
+ <li>
+ <a href="#xml">Extensible Markup Language (XML)</a>
+ </li>
+ <li>
+ <a href="#jaas">JAAS</a>
+ </li>
+ <li>
+ <a href="#mvc">Model View Controller</a>
+ </li>
+ </ul>
+
+ <p>
+ This primer briefly defines each of these technologies
+ but does not describe them in detail.
+ For your convenience, links to further information are
+ provided if you would like to learn more about a
+ technology.
+ </p>
+
+ <p>
+ If you are familiar with Java,
+ but not these technologies,
+ the best overall starting point is
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/index.html">
+ The J2EE Tutorial.
+ </a>
+ The tutorial is also available for download in
+ <a class="externalLink" href="http://java.sun.com/webservices/docs/1.0/tutorial/doc/JavaWSTutorial.pdf">
+ PDF</a>
+ format.
+ </p>
+
+ <p>
+ If you've created web applications for other platforms, you
+ may be able to follow along
+ and visit the other references as needed. The core
+ technologies used by the framework are
+ also used by most other Java web development products, so
+ the background information will be
+ useful in any Java project.
+ </p>
+
+ <p>
+ If you are not familiar with the Java language
+ generally,
+ then the best starting point is
+ <a class="externalLink" href="http://java.sun.com/docs/books/tutorial/index.html">
+ The Java Tutorial.
+ </a>
+ This overlaps with The J2EE Tutorial in some
+ places, but the two work well together.
+ </p>
+
+ <p>
+ For more about building Java application in general, see
+ the
+ <a class="externalLink" href="http://java.sun.com/developer/onlineTraining/new2java/">
+ New to
+ Java Center.</a>
+ </p>
+
+ </div>
+
+ <a name="http"></a>
+ <div class="section"><h3>HTTP, HTML and User Agents<a name="HTTP_HTML_and_User_Agents"></a></h3>
+
+ <p>
+ The World Wide Web was built over the Hypertext Transfer
+ Protocol
+ <a class="externalLink" href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">
+ (HTTP)</a>
+ and the Hypertext Markup Language
+ <a class="externalLink" href="http://www.w3.org/MarkUp/">(HTML).</a>
+ A User Agent, like a web browser, uses HTTP to request
+ a HTML document. The browser then formats and displays the
+ document to its user. HTTP is used to
+ transport more than HTML, but HTML is the lingua franca of
+ the Web and web applications.
+ </p>
+
+ <p>
+ While building web applications, some Java developers
+ write their own HTML. Others leave that responsibility to
+ the
+ page designers.</p>
+
+ <p>For more about HTTP, HTML, and User Agents, see:</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://www.w3.org/MarkUp/Guide/">
+ Getting started with HTML
+ </a>
+ by Dave Raggett
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/HTTP.html">
+ HTTP Overview
+ </a>
+ in The J2EE Tutorial.
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.rfc-editor.org/rfc/rfc2616.txt">
+ HTTP/1.1
+
+ </a>
+ Specification
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.rfc-editor.org/rfc/rfc2617.txt">
+ HTTP
+ Basic and Digest Authentication
+ </a>
+ Specification
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.rfc-editor.org/rfc/rfc2109.txt">
+ State
+ Management Mechanism
+ </a>
+ Specification (Cookies)
+ </li>
+ </ul>
+ </div>
+
+ <a name="cycle"></a>
+ <div class="section"><h3>The HTTP Request/Response cycle<a name="The_HTTP_RequestResponse_cycle"></a></h3>
+
+ <p>
+ A very important part of HTTP for the web developer is the
+ request/response cycle. To use HTTP
+ you have to make a request. A HTTP server, like a web
+ server, is then obliged to respond. When you
+ build your web application, you design it to react to a
+ HTTP request by returning a HTTP response.
+ Frameworks abstract much of these nuts and bolts, but it
+ is important to understand
+ what is happening behind the scenes.</p>
+
+ <p>If you are not familiar with the HTTP request/response
+ cycle, we
+ <b>strongly</b>
+ recommend the
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/HTTP.html">
+ HTTP Overview</a>
+ in The J2EE Tutorial.
+ </p>
+
+ </div>
+
+ <a name="javascript"></a>
+ <div class="section"><h3>JavaScript, AJAX, and SOAP<a name="JavaScript_AJAX_and_SOAP"></a></h3>
+
+ <p>
+ A problem with the HTTP request/response cycle is that
+ it does not promote an interactive user interface.
+ Web developers often resort to scripting language,
+ like JavaScript, to make web applications more
+ interesting.
+ </p>
+ <p>
+ An advanced usage of JavaScript, called AJAX, can
+ help developers create web applications that are as
+ interactive and responsive as desktop applications.
+ </p>
+
+ <p>For more about JavaScript and AJAX, see</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://en.wikipedia.org/wiki/JavaScript">
+ Wikipedia - JavaScript</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.adaptivepath.com/publications/essays/archives/000385.php">
+ Ajax: A New Approach to Web Applications
+ </a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://en.wikipedia.org/wiki/AJAX">
+ Wikipedia - AJAX</a>
+ </li>
+ </ul>
+
+ <p>
+ Another technology that can enhance the HTTP
+ request/response cycle is SOAP.
+ Using SOAP, an application can access data and invoke
+ business logic on another server using HTTP as transfer
+ layer.
+ Using AJAX and SOAP together is becoming a popular way for
+ page to submit finely-grained requests directly to a
+ remote server,
+ while still retaining a separation of concerns beween the
+ the business logic and the page markup,.
+ </p>
+
+ <p>For more about SOAP, see</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://en.wikipedia.org/wiki/SOAP">
+ Wikipedia - SOAP</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="java"></a>
+ <div class="section"><h3>The Java Language and Application Frameworks<a name="The_Java_Language_and_Application_Frameworks"></a></h3>
+
+ <p>
+ The framework is written in the popular and versatile
+ <a class="externalLink" href="http://java.sun.com/docs/books/jls/first_edition/html/index.html">
+ Java programming language.</a>
+ Java is an object-orientated language, and the framework
+ makes good use of many
+ object-orientated techniques. In addition, Java natively
+ supports the
+ concept of
+ <i>threads,</i>
+ which allows more than one task to be
+ performed at the same time. A good understanding of Java,
+ and especially
+ object-orientated programming (OOP) and threading, will
+ help
+ you get the most out of the framework and this User Guide.
+ </p>
+
+ <p>For more about Java and threads, see</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/docs/books/tutorial/java/index.html">
+ Learning the Java Language
+ </a>
+ in the Java Tutorial
+ </li>
+ <li>
+ <a class="externalLink" href="http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html">
+ Threads: Doing Two or More Tasks At Once
+ </a>
+ in the Java Language
+ Tutorial
+ </li>
+ </ul>
+
+ <p>
+ Even if you have worked with Java and OOP before, it can
+ also help to be aware of the
+ programming challenges specific to creating and using
+ application frameworks. For more about application
+ frameworks, see the classic white papers</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://www.laputan.org/drc/drc.html">
+ Designing Reusable Classes
+ </a>
+ by Ralph E. Johnson & Brian Foote
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.cs.wustl.edu/~schmidt/CACM-frameworks.html">
+ Object-Oriented Application
+ Frameworks
+ </a>
+ by Mohamed Fayad and Douglas C. Schmidt
+ </li>
+ </ul>
+
+ <p>
+ These papers can be especially helpful if you are
+ fact-finding or reviewing server-side
+ <a class="externalLink" href="http://www.dmoz.org/Computers/Programming/Languages/Java/Enterprise_Edition/Libraries_and_Frameworks/">
+ frameworks</a>
+ .
+ </p>
+
+ </div>
+
+ <a name="javabeans"></a>
+ <div class="section"><h3>JavaBeans<a name="JavaBeans"></a></h3>
+
+ <p>
+ Like many Java applications, most of the framework objects
+ are designed as
+ <a class="externalLink" href="http://java.sun.com/products/javabeans/">
+ JavaBeans.</a>
+ Following the JavaBean design patterns makes
+ the framework's classes easier to use -- both by Java
+ developers and by Java development tools.
+ </p>
+
+ <p>
+ Although JavaBeans were first created for visual elements,
+ these object design patterns have been found to
+ be useful as the basis for any reusable component, like
+ those used by the framework.</p>
+
+ <p>For more about JavaBeans, see:</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/javabeans/docs/">
+ The
+ JavaBeans Component Architecture
+ Documentation
+ </a>
+ page at
+ <tt>java.sun.com,</tt>
+ including a link to download the
+ <a class="externalLink" href="http://java.sun.com/products/javabeans/docs/spec.html">
+ JavaBeans 1.01 Specification</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/docs/books/tutorial/javabeans/index.html">
+ The JavaBeans Trail
+ </a>
+ in the Java Tutorial
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPBeans.html">
+ JavaBeans Components in JSP Pages
+ </a>
+ in The J2EE Tutorial
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="reflection"></a>
+ <div class="section"><h3>Reflection and Introspection<a name="Reflection_and_Introspection"></a></h3>
+
+ <p>
+ Reflection is the process of determining which member
+ fields and methods are available on an object.
+ Introspection is a specialized form of reflection used by
+ the JavaBean API.
+ Using Introspection, we can determine which methods of a
+ JavaBean are intended to be accessed by other objects.
+ (The getters and the setters, for example.)
+ </p>
+
+ <p>
+ The framework uses Introspection to convert HTTP
+ parameters into JavaBean properties and to populate HTML
+ fields from JavaBean properties.
+ This technique makes it easy to "roundtrip" properties
+ between HTML forms and JavaBeans.
+ </p>
+
+ <p>
+ For more about Reflection and Introspection, see
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/docs/books/tutorial/reflect/">
+ The Reflection Trail</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/javabeans/docs/spec.html">
+ Chapter 8 of the JavaBeans API Specification</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="maps"></a>
+ <div class="section"><h3>Maps<a name="Maps"></a></h3>
+
+ <p>
+ JavaBeans store data as properties and may act on that
+ data through other methods.
+ JavaBeans are flexible and powerful objects but are not
+ the only object that programmers use to store data.
+ Another popular object is the Map
+ <tt>[java.util.Map].</tt>
+ A Map is a simple collection of name and value pairs.
+ Maps are often used "behind the scenes" as a flexible way
+ to store dynamic data.
+ </p>
+
+ </div>
+
+
+ <a name="resources"></a>
+ <div class="section"><h3>Properties Files and ResourceBundles<a name="Properties_Files_and_ResourceBundles"></a></h3>
+
+ <p>
+ Java applications, including web applications, are often
+ configured using
+ <a class="externalLink" href="http://java.sun.com/j2se/1.4.1/docs/api/java/util/Properties.html">
+ Properties</a>
+ files. Properties files are the basis for the
+ <a class="externalLink" href="http://java.sun.com/j2se/1.4.1/docs/api/java/util/ResourceBundle.html">
+ ResourceBundles</a>
+ that the framework uses to provide message resources
+ to an application.
+ </p>
+
+ <p>For more about Properties files, see:</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://docs.oracle.com/javase/tutorial/essential/environment/properties.html">
+ Using Properties to Manage Program
+ Attributes
+ </a>
+ in The Java Tutorial
+ </li>
+ </ul>
+
+ <p>Java ResourceBundles use one or more Properties files to
+ provide internationalized messages
+ to users based their
+ <a class="externalLink" href="http://java.sun.com/j2se/1.4.1/docs/api/java/util/Locale.html">
+ Locale.</a>
+ Support for localizing an application was built into the
+ framework from the ground-up.
+ </p>
+
+ <p>For more about localization and ResourceBundles, see</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/docs/books/tutorial/i18n/resbundle/concept.html">
+ About the ResourceBundle Class
+ </a>
+ in the Java Tutorial
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="containers"></a>
+ <div class="section"><h3>Servlets, Filters, and Web Containers<a name="Servlets_Filters_and_Web_Containers"></a></h3>
+ <p>
+ Since Java is an object-orientated language, the
+ <a class="externalLink" href="http://www.novocode.com/doc/servlet-essentials/">
+ Java Servlet</a>
+ platform strives to cast HTTP into an object-orientated
+ form.
+ This strategy makes it easier for Java developers to
+ concentrate on what they need their application to do --
+ rather than the mechanics of HTTP.
+ </p>
+
+ <p>
+ HTTP provides a standard mechanism for extending servers
+ called the Common Gateway Interface, or CGI.
+ The server can pass a request to a CGI-aware program, and
+ the program will pass back a response.
+ Likewise, a Java-aware server can pass a request to a
+ servlet container.
+ The container can fulfill the request or it can pass the
+ request back to the HTTP server.
+ The container decides whether it can handle the request by
+ checking its list of servlets.
+ If there is a servlet registered for the request, the
+ container passes the request to the servlet.
+ </p>
+
+ <p>
+ When a request comes in, the container checks to see if
+ there is a servlet registered for that request.
+ If there is a match,
+ the request is given to the servlet.
+ If not, the request is returned to the HTTP server.
+ </p>
+
+ <p>
+ It's the container's job to manages the servlet lifecycle.
+ The container creates the servlets, invokes the servlets,
+ and ultimately disposes the servlets.
+ </p>
+
+ <p>
+ A servlet is generally a subclass of
+ <tt>javax.servlet.http.HttpServlet.</tt>
+ A servlet must implement four methods, which are invoked
+ by the container as needed:
+ </p>
+
+ <ul>
+ <li>
+ <b>public void init(ServletConfig
+ config)</b>
+ - Called by the
+ servlet container when the servlet instance is first
+ created, and
+ before any request is processed.
+ </li>
+ <li>
+ <b>public void doGet(HttpServletRequest request,
+ HttpServletResponse response)</b>
+ - Called to process a
+ specific request received using the HTTP
+ <tt>GET</tt>
+ protocol,
+ which generates a corresponding dynamic response.
+ </li>
+ <li>
+ <b>public void doPost(HttpServletRequest request,
+ HttpServletResponse response)</b>
+ - Called to process a
+ specific request received using the HTTP
+ <tt>POST</tt>
+ protocol,
+ which generates a corresponding dynamic response.
+ </li>
+ <li>
+ <b>public void destroy()</b>
+ - Called by the servlet
+ container when it takes this servlet instance out of
+ service,
+ such as when a web application is being undeployed or
+ when the
+ entire container is being shut down.
+ </li>
+ </ul>
+
+ <p>
+ The framework provides a ready-to-use servlet for your
+ application
+ <tt>[org.apache.struts.action.ActionServlet].</tt>
+ As a developer, you can then just write objects
+ that the ActionServlet calls when needed.
+ But it is still helpful to understand the
+ servlet essentials,
+ and the role they play in a Java web application.
+ </p>
+
+ <p>
+ For more about Java Servlets, see:
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/servlet/">
+ The
+ Java Servlet Technology
+ </a>
+ page at
+ <tt>java.sun.com</tt>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/servlet/download.html">
+ The
+ Servlet 2.3 and 2.4 Specifications
+ </a>
+ download page at
+ <tt>java.sun.com</tt>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html">
+ Java Servlet Technology
+ </a>
+ in The J2EE Tutorial.
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="threads"></a>
+ <div class="section"><h3>Servlets and Threads<a name="Servlets_and_Threads"></a></h3>
+
+ <p>
+ To boost performance, the container can multi-thread
+ servlets.
+ Only one instance of a particular servlet is created,
+ and each request for that servlet passes through the same
+ object.
+ This strategy helps the container make the best use of
+ available resources.
+ The tradeoff is that the servlet's
+ <tt>doGet()</tt>
+ and
+ <tt>doPost()</tt>
+ methods must be programmed in a
+ <i>thread-safe</i>
+ manner.
+ </p>
+
+ <p>
+ For more about servlets and thread-safety, see:
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets5.html#102985">
+ Controlling Concurrent Access to Shared
+ Resources</a>
+ in The J2EE Tutorial.
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="context"></a>
+ <div class="section"><h3>Servlet Context<a name="Servlet_Context"></a></h3>
+
+ <p>
+ The
+ <i>ServletContext</i>
+ interface
+ <tt>[javax.servlet.ServletContext]</tt>
+ defines a servlet's view of
+ the web application within which the servlet is running.
+ It is
+ accessible in a servlet via the
+ <tt>getServletConfig()</tt>
+ method,
+ and in a JSP page as the
+ <tt>application</tt>
+ implicit variable.
+ Servlet contexts provide several APIs that are very useful
+ in building web applications:
+ </p>
+ <ul>
+ <li>
+ <i>Access To Web Application Resources</i>
+ - A servlet can
+ access static resource files within the web
+ application using the
+ <tt>getResource()</tt>
+ and
+ <tt>getResourceAsStream()</tt>
+ methods.
+ </li>
+ <li>
+ <i>Servlet Context Attributes</i>
+ - The context makes available
+ a storage place for Java objects, identified by
+ string-valued keys.
+ These attributes are global to the entire web
+ application, and may
+ be accessed by a servlet using the
+ <tt>getAttribute(),</tt>
+ <tt>getAttributeNames(),</tt>
+ <tt>removeAttribute(),</tt>
+ and
+ <tt>setAttribute()</tt>
+ methods. From a JSP page, servlet
+ context attributes are also known as "application
+ scope beans".
+ </li>
+ </ul>
+
+ <p>
+ For more about the servlet context, see:
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets10.html#75507">
+ Accessing the Web Context</a>
+ in The J2EE Tutorial.
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="request"></a>
+ <div class="section"><h3>Servlet Request<a name="Servlet_Request"></a></h3>
+
+ <p>
+ Each request processed by a servlet is represented by a
+ Java
+ interface, normally a
+ <tt>HttpServletRequest</tt>
+ <tt>[javax.servlet.http.HttpServletRequest].</tt>
+ The request interface provides an object-oriented
+ mechanism to access
+ all of the information that was included in the underlying
+ HTTP request,
+ including:
+ </p>
+ <ul>
+ <li>
+ <i>Cookies</i>
+ - The set of cookies included with this request
+ are available via the
+ <tt>getCookies()</tt>
+ method.
+ </li>
+ <li>
+ <i>Headers</i>
+ - HTTP headers that were included with
+ the request are accessible by name. You can enumerate
+ the names
+ of all included headers.
+ </li>
+ <li>
+ <i>Parameters</i>
+ - Request parameters, including those from
+ the query string portion of the URL and from the
+ embedded content
+ of the request (POST only) are available by name.
+ </li>
+ <li>
+ <i>Request Characteristics</i>
+ - Many other characteristics
+ of the incoming HTTP request, such as the method used
+ (normally
+ GET or POST) the protocol scheme used ("http" or
+ "https"), and
+ similar values.
+ </li>
+ <li>
+ <i>Request URI Information</i>
+ - The original request URI
+ being processed is available via
+ <tt>getRequestURI()</tt>
+ .
+ In addition, the constituent parts into which the
+ servlet container
+ parses the request URI (contextPath, servletPath, and
+ pathInfo) are
+ available separately.
+ </li>
+ <li>
+ <i>User Information</i>
+ - If you are using
+ <a href="#security">Container Managed Security</a>
+ , you can ask for
+ the username of the authenticated user, retrieve a
+ <tt>Principal</tt>
+ object representing the current user, and
+ whether the current user is authorized for a specified
+ role.
+ </li>
+ </ul>
+
+ <p>
+ In addition, servlet requests support
+ <i>request attributes</i>
+ (from JSP, these are "request scope beans"), analogous to
+ the servlet
+ context attributes described above. Request attributes are
+ often used
+ to communicate state information from a business logic
+ class that
+ generates it to a view component (such as a JSP page) that
+ will use
+ the information to produce the corresponding response.
+ </p>
+
+ <p>
+ The servlet container guarantees that a particular request
+ will
+ be processed by a servlet on a single thread. Therefore,
+ you do not
+ generally have to worry about the thread safety of your
+ access to
+ request properties and attributes.</p>
+
+ <p>
+ For more about the servlet request, see:
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets7.html#63090">
+ Getting Information from Requests</a>
+ in The J2EE Tutorial.
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="response"></a>
+ <div class="section"><h3>Servlet Response<a name="Servlet_Response"></a></h3>
+
+ <p>
+ The primary purpose of a servlet is to process an incoming
+ <a href="#request">Servlet Request</a>
+ <tt>[javax.servlet.http.HttpServletRequest]</tt>
+ and convert it into a
+ corresponding response. This is performed by calling
+ appropriate
+ methods on the servlet response
+ <tt>[javax.servlet.http.HttpServletResponse]</tt>
+ interface. Available methods let you:
+ </p>
+ <ul>
+ <li>
+ <i>Set Headers</i>
+ - You can set HTTP headers that will be
+ included in the response. The most important header is
+ the
+ <tt>Content-Type</tt>
+ header, which tells your client what
+ kind of information is included in the body of this
+ response.
+ This is typically set to
+ <tt>text/html</tt>
+ for an HTML page,
+ or
+ <tt>text/xml</tt>
+ for an XML document.
+ </li>
+ <li>
+ <i>Set Cookies</i>
+ - You can add cookies to the current
+ response.
+ </li>
+ <li>
+ <i>Send Error Responses</i>
+ - You can send an HTTP error status
+ (instead of a usual page of content) using
+ <tt>sendError()</tt>
+ .
+ </li>
+ <li>
+ <i>Redirect To Another Resource</i>
+ - You can use the
+ <tt>sendRedirect()</tt>
+ method to redirect the client to
+ some other URL that you specify.
+ </li>
+ </ul>
+
+ <p>
+ An important principle in using the servlet response APIs
+ is that
+ any methods you call to manipulate headers or cookies
+ <b>MUST</b>
+ be performed before the first buffer-full of
+ content has been flushed to the client. The reason for
+ this restriction
+ is that such information is transmitted at the beginning
+ of the HTTP
+ response, so trying things like adding a header after the
+ headers have
+ already been sent will not be effective.
+ </p>
+
+ <p>
+ When you are using presentation pages in a Model 2
+ application,
+ you will not generally use the servlet response APIs
+ directly.
+ In the case of JavaServerPages, the JSP page compiler
+ in your servlet container will convert your page into a
+ servlet.
+ The JSP servlet renders the response, interspersing
+ dynamic
+ information where you have interposed JSP custom tags.
+ </p>
+
+ <p>
+ Other presentation systems, like Velocity Tools for
+ Struts,
+ may delegate rendering the response to a specialized
+ servlet,
+ but the same pattern holds true.
+ You create a template,
+ and the dynamic response is generated automatically from
+ the template.
+ </p>
+
+ <p>
+ For more about the servlet response, see:
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets7.html#79563">
+ Constructing Responses</a>
+ in The J2EE Tutorial.
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="filters"></a>
+ <div class="section"><h3>Filters<a name="Filters"></a></h3>
+
+ <p>
+ If you are using a servlet container based on version
+ <b>2.3</b>
+ or later of the Servlet Specification (such as
+ Tomcat 4.x), you can take advantage of the new Filter APIs
+ <tt>[javax.servlet.Filter]</tt>
+ that
+ let you compose a set of components that will process a
+ request or
+ response. Filters are aggregated into a chain in which
+ each filter
+ has a chance to process the request and response before
+ and after
+ it is processed by subsequent filters (and the servlet
+ that is ultimately
+ called).
+ </p>
+
+ <p>
+ Struts 1.2 and earlier require your container to implement
+ version 2.2 or later of the Servlet Specification,
+ so those versions of the Struts framework do not use
+ Filters internaly. Beginning with Struts 1.3, a container
+ that supports version 2.3 or later of the Servlet
+ Specification is required.
+ Struts 2 uses a filter as the base of the controller,
+ instead of a servlet.
+ </p>
+
+ <p>
+ For more about filters, see:
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets8.html#103101">
+ Filtering Requests and Responses</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/servlet/Filters.html">
+ The Essentials of Filters</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="session"></a>
+ <div class="section"><h3>Sessions<a name="Sessions"></a></h3>
+
+ <p>
+ One of the key characteristics of HTTP is that it is
+ <i>stateless.</i>
+ In other words, there is nothing built in to
+ HTTP that identifies a subsequent request from the same
+ user as being
+ related to a previous request from that user. This makes
+ building an
+ application that wants to engage in a conversation with
+ the user over
+ several requests to be somewhat difficult.
+ </p>
+
+ <p>
+ To alleviate this difficulty, the servlet API provides a
+ programmatic
+ concept called a
+ <i>session,</i>
+ represented as an object that
+ implements the
+ <tt>javax.servlet.http.HttpSession</tt>
+ interface.
+ The servlet container will use one of two techniques
+ (cookies or
+ URL rewriting) to ensure that the next request from the
+ same user will
+ include the
+ <i>session id</i>
+ for this session, so that state
+ information saved in the session can be associated with
+ multiple
+ requests. This state information is stored in
+ <i>session
+ attributes</i>
+ (in JSP, they are known as "session scope beans").
+ </p>
+
+ <p>
+ To avoid occupying resources indefinitely when a user fails to
+ complete
+ an interaction, sessions have a configurable
+ <i>timeout interval.</i>
+ If the time gap between two requests exceeds this
+ interval, the session
+ will be timed out, and all session attributes removed. You
+ define a
+ default session timeout in your web application deployment
+ descriptor,
+ and you can dynamically change it for a particular session
+ by calling
+ the
+ <tt>setMaxInactiveInterval()</tt>
+ method.
+ </p>
+
+ <p>Unlike requests, you need to be concerned about thread
+ safety on
+ your session attributes (the methods these beans provide,
+ not the
+ <tt>getAttribute()</tt>
+ and
+ <tt>setAttribute()</tt>
+ methods
+ of the session itself). It is surprisingly easy for there
+ to be
+ multiple simultaneous requests from the same user, which
+ will therefore
+ access the same session.
+ </p>
+
+ <p>Another important consideration is that session attributes
+ occupy
+ memory in your server
+ <i>in between</i>
+ requests. This can have
+ an impact on the number of simultaneous users that your
+ application can
+ support. If your application requirements include very
+ large numbers of
+ simultaneous users, you will likely want to minimize your
+ use of
+ session attributes, in an effort to control the overall
+ amount of memory
+ required to support your application.
+ </p>
+
+ <p>
+ For more about sessions, see:
+ </p>
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets11.html#63281">
+ Maintaining Client State</a>
+ in The J2EE Tutorial
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/servlet/2.1/api/javax.servlet.http.HttpSession.html">
+ <tt>javax.servlet.http.HttpSession</tt>
+ </a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="dispatch"></a>
+ <div class="section"><h3>Dispatching Requests<a name="Dispatching_Requests"></a></h3>
+
+ <p>
+ The Java Servlet specification extends the HTTP
+ request/response cycle by allowing the request to be
+ dispatched,
+ or forwarded, between resources.
+ The framework uses this feature to pass a request through
+ specialized components,
+ each handling one aspect of the response.
+ In the normal course, a request may pass through a
+ controller object, a model object,
+ and finally to a view object as part of a single
+ request/response cycle.
+ </p>
+
+ </div>
+
+ <a name="webapp"></a>
+ <div class="section"><h3>Web Applications<a name="Web_Applications"></a></h3>
+
+ <p>
+ Just as a HTTP server can be used to host several distinct
+ websites,
+ a servlet container can be used to host more than one web
+ application.
+ The Java servlet platform provides a well-defined
+ mechanism for organizing and deploying web applications.
+ Each application runs in its own namespace so that they
+ can be developed and deployed separately.
+ A web application can be assembled into a Web Application
+ Archive, or WAR file.
+ The single WAR can be uploaded to the server and
+ automatically deployed.
+ </p>
+
+ </div>
+
+ <a name="events"></a>
+ <div class="section"><h3>Web application deployment descriptor (web.xml)<a name="Web_application_deployment_descriptor_web.xml"></a></h3>
+
+ <p>
+ Most aspects of an application's lifecycle are configured
+ through an XML document called the Web application
+ deployment descriptor.
+ The schema of the descriptor, or web.xml, is given by the
+ Java servlet specification.
+ </p>
+
+ </div>
+
+ <a name="security"></a>
+ <div class="section"><h3>Security<a name="Security"></a></h3>
+
+ <p>
+ One detail that can be configured in the Web application
+ deployment descriptor is container-managed security.
+ Declarative security can be used to protect requests for
+ URIs that match given patterns.
+ Pragmatic security can be used to fine-tune security make
+ authorization decisions based on the time of day,
+ the parameters of a call, or the internal state of a Web
+ component.
+ It can also be used to restrict authentication based on
+ information in a database.
+ </p>
+
+ <p>
+ For more about security, see:
+ </p>
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications/security/index.html">
+ J2EE Blueprints: Security</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://securityfilter.sourceforge.net/">
+ SecurityFilter
+ </a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.springframework.org/spring-security/">
+ Spring Security</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://sslext.sourceforge.net/">
+ The Struts SSL Extension for HTTP/HTTPS switching </a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="jsp"></a>
+ <div class="section"><h3>JavaServer Pages, JSP Tag Libraries, and JavaServer Faces<a name="JavaServer_Pages_JSP_Tag_Libraries_and_JavaServer_Faces"></a></h3>
+ <p>
+ <a class="externalLink" href="http://java.sun.com/products/jsp/product.html">
+ JavaServer Pages</a>
+ (JSPs) are
+ "inside-out servlets" that make it easier to create and
+ maintain dynamic web pages. Instead
+ of putting what you want to write to the HTTP response
+ inside of a Java
+ <tt>print</tt>
+ statement, everything in a JavaServer Page is written to
+ the response,
+ <b>except</b>
+ what is
+ placed within special Java statements.
+ </p>
+
+ <p>With
+ <b>JavaServer Pages</b>
+ you can start by writing the page in standard HTML and
+ then add the
+ dynamic features using statements in the Java language or
+ by using
+ <a class="externalLink" href="http://java.sun.com/products/jsp/taglibraries.html">
+ JSP tags.</a>
+ The framework distribution includes several JSP tags
+ that make it easy to access the framework's
+ features from a JavaServer Page.
+ </p>
+
+ <p>For more about JavaServer Pages and Custom JSP Tag
+ Libraries see</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/jsp/">
+ The
+ JavaServer Pages Technology
+ </a>
+ page at
+ <tt>java.sun.com</tt>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/jsp/reference/api/index.html">
+ The
+ JSP 1.2 and 2.0 Specifications
+ </a>
+ download page at
+ <tt>java.sun.com</tt>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPIntro.html">
+ JavaServer Pages Technology
+ </a>
+ in The J2EE Tutorial
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPTags.html">
+ Custom Tags in JSP Pages
+ </a>
+ in The J2EE Tutorial
+ </li>
+ </ul>
+
+ <p>
+ Many times, JSP tags work hand-in-hand with JavaBeans. The
+ application sends a JavaBean to
+ the JSP, and the JSP tag uses the bean to customize the
+ page for the instant user. For more, see
+ <a class="externalLink" href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPBeans.html">
+ JavaBeans Components in JSP Pages</a>
+ in The J2EE Tutorial.
+ </p>
+
+ <p>
+ The framework also works well with the
+ <a class="externalLink" href="http://java.sun.com/products/jsp/jstl">
+ JavaServer Pages Standard Tag Library
+ </a>
+ (JSTL) and taglibs from other sources, like
+ <a class="externalLink" href="http://jsptags.com/">JSP Tags,</a>
+ <a class="externalLink" href="http://jakarta.apache.org/taglibs/index.html">
+ Jakarta Taglibs,</a>
+ <a class="externalLink" href="http://struts.application-servers.com">Struts
+ Layout,</a>
+ and
+ <a class="externalLink" href="http://displaytag.sourceforge.net/">
+ Display Tags.</a>
+ </p>
+
+ <p>
+ One of the components available with the framework is
+ <a class="externalLink" href="http://struts.apache.org/struts-el/index.html">
+ Struts-EL</a>
+ .
+ This taglib is specifically designed to work well with
+ JSTL.
+ In particular, it uses the same "expression language"
+ engine for evaluating tag attribute values as JSTL.
+ This is in contrast to the original Struts tag library,
+ which can only use "rtexprvalue"s (runtime scriptlet
+ expressions) for dynamic attribute values.
+ </p>
+
+ <p>There are also toolkits available that make the framework
+ easy to use with
+ <a class="externalLink" href="http://stxx.sourceforge.net/">XSLT</a>
+ and
+ <a class="externalLink" href="http://velocity.apache.org/tools/devel/">
+ Velocity Templates.</a>
+ </p>
+
+ <p>
+ The newest star on the Java horizon is
+ <a class="externalLink" href="http://java.sun.com/j2ee/javaserverfaces/">
+ JavaServer Faces technology.</a>
+ JSF aims to simplify building user interfaces for JavaServer
+ applications, both for the web and for the desktop.
+ </p>
+ <p>
+ For an open source implementation of JSF, visit our
+ sibling project, <a class="externalLink" href="http://myfaces.apache.org">
+ Apache MyFaces.</a>
+ </p>
+
+ <p>For more about JSTL and JavaServer Faces see</p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://today.java.net/pub/a/today/2003/10/07/jstl1.html">
+ Practical JSTL, Part 1</a>
+ by Sue Spielman
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.jsfcentral.com">
+ JSF Central
+ </a>
+ - JavaServer Faces resources.
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.jamesholmes.com/JavaServerFaces/">
+ JavaServer Faces Resources
+ </a>
+ - James Holmes dot Com.
+ </li>
+ <li>
+ <a class="externalLink" href="http://myfaces.apache.org">Apache MyFaces</a>
+ - An open source implementation of
+ the JSF specification.
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="xml"></a>
+ <div class="section"><h3>Extensible Markup Language (XML)<a name="Extensible_Markup_Language_XML"></a></h3>
+
+ <p>The features provided by the framework rely on a number of
+ objects that are
+ usually deployed using a configuration file written in
+ <a class="externalLink" href="http://www.w3.org/XML/">Extensible Markup
+ Language.</a>
+ XML is also used to
+ configure Java web applications; so, this is yet another
+ familiar approach.
+ </p>
+
+ <p>
+ For more about how XML is used with Java applications
+ generally, see the
+ <a class="externalLink" href="http://jaxp.java.net/">
+ Java API for XML Processing</a> Tutorial.
+ While the framework makes good use of this API internally,
+ it is not something most developers would use
+ when writing their own applications with the framework.
+ </p>
+
+ </div>
+
+ <a name="descriptors"></a>
+ <div class="section"><h3>Descriptors<a name="Descriptors"></a></h3>
+
+ <p>
+ When Java applications use XML configuration files,
+ the elements are most often used as
+ <i>descriptors.</i>
+ The application does not use the XML elements directly.
+ The elements are used to create and configure (or deploy)
+ Java objects.
+ </p>
+
+ <p>
+ The Java Servlet platform uses an XML configuration file
+ to deploy servlets (among other things).
+ Likewise, The framework uses an XML configuration file to
+ deploy objects.
+ </p>
+
+ </div>
+
+ <a name="jaas"></a>
+ <div class="section"><h3>JAAS<a name="JAAS"></a></h3>
+
+ <p>
+ While the framework can work with any approach to user
+ authentication and authorization, version 1.1 and later
+ offers
+ direct support for the standard Java Authentication and
+ Authorization Service (JAAS).
+ You can now specify security roles on an action-by-action
+ basis.
+ </p>
+
+ <p>For more about JAAS, see the Sun Developer Network
+ <a class="externalLink" href="http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html">product
+ page</a>.
+ </p>
+
+ <p>
+ A popular extension for handling security in a Java web
+ application, including a framework application,
+ is
+ <a class="externalLink" href="http://securityfilter.sourceforge.net/">
+ SecurityFilter</a> .
+ </p>
+
+ </div>
+
+ <a name="mvc"></a>
+ <div class="section"><h3>Model View Controller (MVC)<a name="Model_View_Controller_MVC"></a></h3>
+
+ <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.
+ </p>
+
+ <p>
+ The term "MVC" originated with the SmallTalk
+ Model-View-Controller framework.
+ In Smalltalk MVC, the View updates itself from the Model, via
+ the "Observer" pattern. The original MVC pattern is like a
+ closed loop: The View talks to the Controller, which talks to
+ the Model, which talks to the View.
+ </p>
+
+ <p>
+ But, a direct link between the Model and the View is not
+ practical for web applications, and we modify the classic MVC
+ arrangement so that it would look less like a loop and more
+ like a horseshoe with the controller in the middle.
+ </p>
+
+ <p>
+ In the MVC/Model 2 design pattern, application flow is mediated
+ by a central Controller. The Controller delegates requests -
+ in our case, HTTP requests - to an appropriate handler. The
+ handlers are tied to a Model, and each handler acts as an
+ adapter between the request and the Model. The Model
+ represents, or encapsulates, an application's business logic or
+ state. Control is usually then forwarded back through the
+ Controller to the appropriate View. The forwarding can be
+ determined by consulting a set of mappings, usually loaded from a
+ database or configuration file. This provides a loose coupling
+ between the View and Model, which can make applications
+ significantly easier to create and maintain.
+ </p>
+
+ <p>
+ While MVC is a convenient paradigm, many workers find that
+ applcations may utilize more than three layers.
+ For example, within the Model, there is often distinct business
+ logic and data access layers.
+ </p>
+
+ <p>
+ The framework provides the control layer for a Model 2 web
+ applications.
+ Developers can use this layer with other standard
+ technologies to build the business, data access, and
+ presentation layers.
+ </p>
+
+ <p>
+ For more about MVC, see
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html">
+ Web-Tier Application Framework Design</a> (Sun J2EE Blueprints)
+ </li>
+ <li>
+ <a class="externalLink" href="http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html">
+ Smalltalk MVC framework.</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://en.wikipedia.org/wiki/Model_view_controller">
+ Wikipedia - MVC</a>
+ </li>
+ </ul>
+ </div>
+
+ <a name="logic_frameworks"></a>
+ <div class="section"><h3>Business Logic Frameworks<a name="Business_Logic_Frameworks"></a></h3>
+
+ <p>
+ Most teams still roll their own business logic layer using
+ plain old JavaBeans (POJOs).
+ Though, business layer frameworks are beginning to emerge,
+ and now include:
+ </p>
+ <ul>
+ <li>
+ <a class="externalLink" href="http://commons.apache.org/chain/">
+ Commons Chain of Responsiblity</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://springframework.org/">Spring</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://struts.apache.org/2.x/">XWork</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="data_frameworks"></a>
+ <div class="section"><h3>Data Access Frameworks<a name="Data_Access_Frameworks"></a></h3>
+
+ <p>
+ Most often, the business layer is seen to be distinct from
+ the data access layer.
+ Some teams roll their own data access objects (DAOs),
+ but more and more teams are turning to one of the many
+ data access frameworks.
+ Some popular data access frameworks include:
+ </p>
+
+ <ul>
+
+ <li>
+ <a class="externalLink" href="http://www.objectstyle.org/cayenne/">
+ Cayenne</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/ejb/index.html">
+ Enterprise Java Beans</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.hibernate.org/">
+ Hibernate</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://ibatis.apache.org">
+ iBATIS</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://java.sun.com/products/jdbc/index.html">
+ JDBC</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://db.apache.org/ojb/">
+ Object Relational Bridge</a>
+ </li>
+ </ul>
+
+ </div>
+
+ <a name="view_frameworks"></a>
+ <div class="section"><h3>View Frameworks<a name="View_Frameworks"></a></h3>
+
+ <p>
+ Aside from Java Server Pages, there are several other
+ presentation technologies available to Java web applications.
+ </p>
+
+ <ul>
+ <li>
+ <a class="externalLink" href="http://www.freemarker.org/">
+ Freemarker</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.lowagie.com/iText/">
+ iText (PDF)</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://jaspersoft.com/">
+ JasperReports</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://velocity.apache.org/">
+ Velocity</a>
+ </li>
+ <li>
+ <a class="externalLink" href="http://www.w3.org/TR/xslt">XSLT</a>
+ </li>
+ </ul>
+
+ </div>
+
+ </div>
+
+
+
+ </div>
+ </div>
+ </div>
+
+ <hr/>
+
+ <footer>
+ <div class="container-fluid">
+ <div class="row span12">Copyright © 2000-2013
+ <a href="http://www.apache.org/">The Apache Software Foundation</a>.
+ All Rights Reserved.
+
+ </div>
+
+ <?xml version="1.0" encoding="UTF-8"?>
+<div class="row span12">Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts
+ project logos are trademarks of The Apache Software Foundation.</div>
+
+
+ </div>
+ </footer>
+ </body>
+</html>
Added: websites/staging/struts/trunk/content/proposals/navigation.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/navigation.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.0.1.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.0.1.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.0b1.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.0b1.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.1.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.1.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.1b1.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.1b1.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.1b2.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.1b2.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.1b3.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.1b3.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.1rc1.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.1rc1.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan-1.1rc2.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan-1.1rc2.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/release-plan_1_2_0.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/release-plan_1_2_0.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/struts-faces.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/struts-faces.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/todo-1.0.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/todo-1.0.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/todo-1.1.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/todo-1.1.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml
Added: websites/staging/struts/trunk/content/proposals/workflow.xml
==============================================================================
Binary file - no diff available.
Propchange: websites/staging/struts/trunk/content/proposals/workflow.xml
------------------------------------------------------------------------------
svn:mime-type = application/xml