struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From grobme...@apache.org
Subject svn commit: r1520906 [2/2] - in /struts/site/branches/next/content: markdown/birdseye.md site.xml xdoc/primer.xml
Date Sun, 08 Sep 2013 20:01:02 GMT
Modified: struts/site/branches/next/content/xdoc/primer.xml
URL: http://svn.apache.org/viewvc/struts/site/branches/next/content/xdoc/primer.xml?rev=1520906&r1=1520905&r2=1520906&view=diff
==============================================================================
--- struts/site/branches/next/content/xdoc/primer.xml (original)
+++ struts/site/branches/next/content/xdoc/primer.xml Sun Sep  8 20:01:01 2013
@@ -17,1601 +17,539 @@ limitations under the License.
 // ======================================================================== 78
 -->
 <document>
-
     <properties>
         <title>Key Technologies Primer</title>
     </properties>
 
     <body>
+        <h1>Key Technologies Primer</h1>
 
-        <section name="Key Technologies Primer">
-
-            <blockquote><p><em>
-            "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." 
-            </em></p></blockquote>
-
-
-            <a name="suspects"/>
-            <subsection name="The Usual Suspects">
-
-                <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 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 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 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 href="http://java.sun.com/developer/onlineTraining/new2java/">
-                        New to
-                        Java Center.</a>
-                </p>
-
-            </subsection>
-
-            <a name="http"/>
-            <subsection name="HTTP, HTML and User Agents">
-
-                <p> 
-                    The World Wide Web was built over the Hypertext Transfer
-                    Protocol
-                    <a href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">
-                        (HTTP)</a>
-                    and the Hypertext Markup Language
-                    <a 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 href="http://www.w3.org/MarkUp/Guide/">
-                            Getting started with HTML
-                        </a>
-                        by Dave Raggett
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/HTTP.html">
-                            HTTP Overview
-                        </a>
-                        in The J2EE Tutorial.
-                    </li>
-                    <li>
-                        <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">
-                            HTTP/1.1
-                            
-                        </a>
-                        Specification
-                    </li>
-                    <li>
-                        <a href="http://www.rfc-editor.org/rfc/rfc2617.txt">
-                            HTTP
-                                Basic and Digest Authentication
-                        </a>
-                        Specification
-                    </li>
-                    <li>
-                        <a href="http://www.rfc-editor.org/rfc/rfc2109.txt">
-                            State
-                                Management Mechanism
-                        </a>
-                        Specification (Cookies)
-                    </li>
-                </ul>
-            </subsection>
-
-            <a name="cycle"/>
-            <subsection name="The HTTP Request/Response cycle">
-
-                <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
-                    <strong>strongly</strong>
-                    recommend the
-                    <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/HTTP.html">
-                        HTTP Overview</a>
-                    in The J2EE Tutorial.
-                </p>
-
-            </subsection>
-
-            <a name="javascript"/>
-            <subsection
-                    name="JavaScript, AJAX, and SOAP">
-                    
-                    <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 href="http://en.wikipedia.org/wiki/JavaScript">
-                            Wikipedia - JavaScript</a>
-                    </li>                    
-                    <li>
-                        <a href="http://www.adaptivepath.com/publications/essays/archives/000385.php">
-                            Ajax: A New Approach to Web Applications
-                        </a>
-                    </li>
-                    <li>
-                        <a 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 href="http://en.wikipedia.org/wiki/SOAP">
-                            Wikipedia - SOAP</a>
-                    </li>                    
-                </ul>
-
-            </subsection>
-
-            <a name="java"/>
-            <subsection
-                    name="The Java Language and Application Frameworks">
-
-                <p> 
-                    The framework is written in the popular and versatile
-                    <a 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
-                    <em>threads,</em>
-                    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 href="http://java.sun.com/docs/books/tutorial/java/index.html">
-                            Learning the Java Language
-                        </a>
-                        in the Java Tutorial
-                    </li>
-                    <li>
-                        <a 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 href="http://www.laputan.org/drc/drc.html">
-                            Designing Reusable Classes
-                        </a>
-                        by Ralph E. Johnson &amp; Brian Foote
-                    </li>
-                    <li>
-                        <a 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 href="http://www.dmoz.org/Computers/Programming/Languages/Java/Enterprise_Edition/Libraries_and_Frameworks/">
-                        frameworks</a>
-                    .
-                </p>
-
-            </subsection>
-
-            <a name="javabeans"/>
-            <subsection name="JavaBeans">
-
-                <p> 
-                    Like many Java applications, most of the framework objects
-                    are designed as
-                    <a 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 href="http://java.sun.com/products/javabeans/docs/">
-                            The
-                                JavaBeans Component Architecture
-                                Documentation
-                        </a>
-                        page at
-                        <code>java.sun.com,</code>
-                        including a link to download the
-                        <a href="http://java.sun.com/products/javabeans/docs/spec.html">
-                            JavaBeans 1.01 Specification</a>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/docs/books/tutorial/javabeans/index.html">
-                            The JavaBeans Trail
-                        </a>
-                        in the Java Tutorial
-                    </li>
-                    <li>
-                        <a 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>
-
-            </subsection>
-
-            <a name="reflection"/>
-            <subsection name="Reflection and Introspection">
-
-                <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 href="http://java.sun.com/docs/books/tutorial/reflect/">
-                            The Reflection Trail</a>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/products/javabeans/docs/spec.html">
-                            Chapter 8 of the JavaBeans API Specification</a>
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="maps"/>
-            <subsection name="Maps">
-
-                <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 
-                    <code>[java.util.Map].</code>
-                    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>
-
-            </subsection>
-
-
-            <a name="resources"/>
-            <subsection name="Properties Files and ResourceBundles">
-
-                <p> 
-                    Java applications, including web applications, are often
-                    configured using
-                    <a 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 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 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 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 href="http://java.sun.com/docs/books/tutorial/i18n/resbundle/concept.html">
-                            About the ResourceBundle Class
-                        </a>
-                        in the Java Tutorial
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="containers"/>
-            <subsection name="Servlets, Filters, and Web Containers">
-                <p>
-                    Since Java is an object-orientated language, the
-                    <a 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
-                    <code>javax.servlet.http.HttpServlet.</code>
-                    A servlet must implement four methods, which are invoked
-                    by the container as needed:
-                </p>
-
-                <ul>
-                    <li>
-                        <strong>public void init(ServletConfig
-                            config)</strong>
-                        - Called by the
-                        servlet container when the servlet instance is first
-                        created, and
-                        before any request is processed.
-                    </li>
-                    <li>
-                        <strong>public void doGet(HttpServletRequest request,
-                            HttpServletResponse response)</strong>
-                        - Called to process a
-                        specific request received using the HTTP
-                        <code>GET</code>
-                        protocol,
-                        which generates a corresponding dynamic response.
-                    </li>
-                    <li>
-                        <strong>public void doPost(HttpServletRequest request,
-                            HttpServletResponse response)</strong>
-                        - Called to process a
-                        specific request received using the HTTP
-                        <code>POST</code>
-                        protocol,
-                        which generates a corresponding dynamic response.
-                    </li>
-                    <li>
-                        <strong>public void destroy()</strong>
-                        - 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 
-                    <code>[org.apache.struts.action.ActionServlet].</code>
-                    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 href="http://java.sun.com/products/servlet/">
-                            The
-                                Java Servlet Technology
-                        </a>
-                        page at
-                        <code>java.sun.com</code>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/products/servlet/download.html">
-                            The
-                                Servlet 2.3 and 2.4 Specifications
-                        </a>
-                        download page at
-                        <code>java.sun.com</code>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html">
-                            Java Servlet Technology
-                        </a>
-                        in The J2EE Tutorial.
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="threads"/>
-            <subsection name="Servlets and Threads">
-
-                <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
-                    <code>doGet()</code>
-                    and
-                    <code>doPost()</code>
-                    methods must be programmed in a
-                    <em>thread-safe</em>
-                    manner.
-                </p>
-
-                <p>
-                    For more about servlets and thread-safety, see:
-                </p>
-
-                <ul>
-                    <li>
-                        <a 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>
-
-            </subsection>
-
-            <a name="context"/>
-            <subsection name="Servlet Context">
-
-                <p> 
-                    The
-                    <em>ServletContext</em>
-                    interface 
-                    <code>[javax.servlet.ServletContext]</code>
-                    defines a servlet's view of
-                    the web application within which the servlet is running.
-                    It is
-                    accessible in a servlet via the
-                    <code>getServletConfig()</code>
-                    method,
-                    and in a JSP page as the
-                    <code>application</code>
-                    implicit variable.
-                    Servlet contexts provide several APIs that are very useful
-                    in building web applications:
-                </p>
-                <ul>
-                    <li>
-                        <em>Access To Web Application Resources</em>
-                        - A servlet can
-                        access static resource files within the web
-                        application using the
-                        <code>getResource()</code>
-                        and
-                        <code>getResourceAsStream()</code>
-                        methods.
-                    </li>
-                    <li>
-                        <em>Servlet Context Attributes</em>
-                        - 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
-                        <code>getAttribute(),</code>
-                        <code>getAttributeNames(),</code>
-                        <code>removeAttribute(),</code>
-                        and
-                        <code>setAttribute()</code>
-                        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 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>
-
-            </subsection>
-
-            <a name="request"/>
-            <subsection name="Servlet Request">
-
-                <p> 
-                    Each request processed by a servlet is represented by a
-                    Java
-                    interface, normally a
-                    <code>HttpServletRequest</code>
-                    <code>[javax.servlet.http.HttpServletRequest].</code>
-                    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>
-                        <em>Cookies</em>
-                        - The set of cookies included with this request
-                        are available via the
-                        <code>getCookies()</code>
-                        method.
-                    </li>
-                    <li>
-                        <em>Headers</em>
-                        - HTTP headers that were included with
-                        the request are accessible by name. You can enumerate
-                        the names
-                        of all included headers.
-                    </li>
-                    <li>
-                        <em>Parameters</em>
-                        - 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>
-                        <em>Request Characteristics</em>
-                        - 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>
-                        <em>Request URI Information</em>
-                        - The original request URI
-                        being processed is available via
-                        <code>getRequestURI()</code>
-                        .
-                        In addition, the constituent parts into which the
-                        servlet container
-                        parses the request URI (contextPath, servletPath, and
-                        pathInfo) are
-                        available separately.
-                    </li>
-                    <li>
-                        <em>User Information</em>
-                        - If you are using
-                        <a href="#security">Container Managed Security</a>
-                        , you can ask for
-                        the username of the authenticated user, retrieve a
-                        <code>Principal</code>
-                        object representing the current user, and
-                        whether the current user is authorized for a specified
-                        role.
-                    </li>
-                </ul>
-
-                <p> 
-                    In addition, servlet requests support
-                    <em>request attributes</em>
-                    (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 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>
-
-            </subsection>
-
-            <a name="response"/>
-            <subsection name="Servlet Response">
-
-                <p> 
-                    The primary purpose of a servlet is to process an incoming
-                    <a href="#request">Servlet Request</a>
-                    <code>[javax.servlet.http.HttpServletRequest]</code>
-                    and convert it into a
-                    corresponding response. This is performed by calling
-                    appropriate
-                    methods on the servlet response 
-                    <code>[javax.servlet.http.HttpServletResponse]</code>
-                    interface. Available methods let you:
-                </p>
-                <ul>
-                    <li>
-                        <em>Set Headers</em>
-                        - You can set HTTP headers that will be
-                        included in the response. The most important header is
-                        the
-                        <code>Content-Type</code>
-                        header, which tells your client what
-                        kind of information is included in the body of this
-                        response.
-                        This is typically set to
-                        <code>text/html</code>
-                        for an HTML page,
-                        or
-                        <code>text/xml</code>
-                        for an XML document.
-                    </li>
-                    <li>
-                        <em>Set Cookies</em>
-                        - You can add cookies to the current
-                        response.
-                    </li>
-                    <li>
-                        <em>Send Error Responses</em>
-                        - You can send an HTTP error status
-                        (instead of a usual page of content) using
-                        <code>sendError()</code>
-                        .
-                    </li>
-                    <li>
-                        <em>Redirect To Another Resource</em>
-                        - You can use the
-                        <code>sendRedirect()</code>
-                        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
-                    <strong>MUST</strong>
-                    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 href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets7.html#79563">
-                            Constructing Responses</a>
-                        in The J2EE Tutorial.
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="filters"/>
-            <subsection name="Filters">
-
-                <p> 
-                    If you are using a servlet container based on version
-                    <strong>2.3</strong>
-                    or later of the Servlet Specification (such as
-                    Tomcat 4.x), you can take advantage of the new Filter APIs
-                    <code>[javax.servlet.Filter]</code>
-                    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 href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets8.html#103101">
-                            Filtering Requests and Responses</a>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/products/servlet/Filters.html">
-                            The Essentials of Filters</a>
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="session"/>
-            <subsection name="Sessions">
-
-                <p> 
-                    One of the key characteristics of HTTP is that it is
-                    <em>stateless.</em>
-                    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
-                    <em>session,</em>
-                    represented as an object that
-                    implements the
-                    <code>javax.servlet.http.HttpSession</code>
-                    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
-                    <em>session id</em>
-                    for this session, so that state
-                    information saved in the session can be associated with
-                    multiple
-                    requests. This state information is stored in
-                    <em>session
-                        attributes</em>
-                    (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
-                    <em>timeout interval.</em>
-                    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
-                    <code>setMaxInactiveInterval()</code>
-                    method.
-                </p>
-
-                <p>Unlike requests, you need to be concerned about thread
-                    safety on
-                    your session attributes (the methods these beans provide,
-                    not the
-                    <code>getAttribute()</code>
-                    and
-                    <code>setAttribute()</code>
-                    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
-                    <em>in between</em>
-                    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 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 href="http://java.sun.com/products/servlet/2.1/api/javax.servlet.http.HttpSession.html">
-                            <code>javax.servlet.http.HttpSession</code>
-                        </a>
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="dispatch"/>
-            <subsection name="Dispatching Requests">
-
-                <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>
-
-            </subsection>
-
-            <a name="webapp"/>
-            <subsection name="Web Applications">
-
-                <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>
-
-            </subsection>
-
-            <a name="events"/>
-            <subsection
-                    name="Web application deployment descriptor (web.xml)">
-
-                <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>
-
-            </subsection>
-
-            <a name="security"/>
-            <subsection name="Security">
-
-                <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 href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications/security/index.html">
-                          J2EE Blueprints: Security</a>
-                    </li>
-                    <li>
-                        <a href="http://securityfilter.sourceforge.net/">
-                            SecurityFilter
-                        </a>
-                    </li>
-                    <li>
-                        <a href="http://www.springframework.org/spring-security/">
-                            Spring Security</a>
-                    </li>
-                    <li>
-                        <a href="http://sslext.sourceforge.net/">
-                            The Struts SSL Extension for HTTP/HTTPS switching </a>
-                    </li>
-                </ul>
-
-            </subsection>
-
-            <a name="jsp"/>
-            <subsection
-                    name="JavaServer Pages, JSP Tag Libraries, and JavaServer Faces"
-                    href="">
-                <p>
-                    <a 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
-                    <code>print</code>
-                    statement, everything in a JavaServer Page is written to
-                    the response,
-                    <strong>except</strong>
-                    what is
-                    placed within special Java statements.
-                </p>
-
-                <p>With
-                    <strong>JavaServer Pages</strong>
-                    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 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 href="http://java.sun.com/products/jsp/">
-                            The
-                                JavaServer Pages Technology
-                        </a>
-                        page at
-                        <code>java.sun.com</code>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/products/jsp/reference/api/index.html">
-                            The
-                                JSP 1.2 and 2.0 Specifications
-                        </a>
-                        download page at
-                        <code>java.sun.com</code>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/JSPIntro.html">
-                            JavaServer Pages Technology
-                        </a>
-                        in The J2EE Tutorial
-                    </li>
-                    <li>
-                        <a 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 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 href="http://java.sun.com/products/jsp/jstl">
-                        JavaServer Pages Standard Tag Library
-                    </a>
-                    (JSTL) and taglibs from other sources, like
-                    <a href="http://jsptags.com/">JSP Tags,</a>
-                    <a href="http://jakarta.apache.org/taglibs/index.html">
-                        Jakarta Taglibs,</a>
-                    <a href="http://struts.application-servers.com">Struts
-                        Layout,</a>
-                    and
-                    <a href="http://displaytag.sourceforge.net/">
-                        Display Tags.</a>
-                </p>
-
-                <p>
-                    One of the components available with the framework is
-                    <a 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 href="http://stxx.sourceforge.net/">XSLT</a>
-                    and
-                    <a href="http://velocity.apache.org/tools/devel/">
-                        Velocity Templates.</a>
-                </p>
-
-                <p>
-                    The newest star on the Java horizon is
-                    <a 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 href="http://myfaces.apache.org">
-                    Apache MyFaces.</a>
-                </p>
-
-                <p>For more about JSTL and JavaServer Faces see</p>
-
-                <ul>
-                    <li>
-                        <a href="http://today.java.net/pub/a/today/2003/10/07/jstl1.html">
-                            Practical JSTL, Part 1</a>
-                        by Sue Spielman
-                    </li>
-                    <li>
-                        <a href="http://www.jsfcentral.com">
-                            JSF Central
-                        </a>
-                        - JavaServer Faces resources.
-                    </li>
-                    <li>
-                        <a href="http://www.jamesholmes.com/JavaServerFaces/">
-                            JavaServer Faces Resources
-                        </a>
-                        - James Holmes dot Com.
-                    </li>
-                    <li>
-                        <a href="http://myfaces.apache.org">Apache MyFaces</a>
-                        - An open source implementation of
-                        the JSF specification.
-                    </li>
-                </ul>
-                
-            </subsection>
-
-            <a name="xml"/>
-            <subsection name="Extensible Markup Language (XML)">
-
-                <p>The features provided by the framework rely on a number of
-                    objects that are
-                    usually deployed using a configuration file written in
-                    <a 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 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>
-
-            </subsection>
-            
-            <a name="descriptors"/>
-            <subsection name="Descriptors">
-
-                <p>
-                    When Java applications use XML configuration files,
-                    the elements are most often used as
-                    <em>descriptors.</em>
-                    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>
-
-            </subsection>
-
-            <a name="jaas"/>
-            <subsection name="JAAS">
-
-                <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 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 href="http://securityfilter.sourceforge.net/">
-                        SecurityFilter</a>                    .
-                </p>
-                
-            </subsection>
-                        
-            <a name="mvc"/>
-            <subsection name="Model View Controller (MVC)">
-            
-                <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 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 href="http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html">
-                       Smalltalk MVC framework.</a>
-                </li>
-                <li>
-                    <a href="http://en.wikipedia.org/wiki/Model_view_controller">
-                       Wikipedia - MVC</a>
-                </li>
-                </ul>                
-            </subsection>
-            
-            <a name="logic_frameworks"/>
-            <subsection name="Business Logic Frameworks">
-
-                <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 href="http://commons.apache.org/chain/">
-                            Commons Chain of Responsiblity</a>
-                    </li>
-                    <li>
-                        <a href="http://springframework.org/">Spring</a>
-                    </li>
-                    <li>
-                        <a href="http://struts.apache.org/2.x/">XWork</a>
-                    </li>
-                </ul>
-
-            </subsection>
-                   
-            <a name="data_frameworks"/>
-            <subsection name="Data Access Frameworks">
-
-                <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 href="http://cayenne.apache.org/">Apache Cayenne</a>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/products/ejb/index.html">
-                            Enterprise Java Beans</a>
-                    </li>
-                    <li>
-                        <a href="http://www.hibernate.org/">
-                            Hibernate</a>
-                    </li>
-                    <li>
-                        <a href="http://ibatis.apache.org">
-                            iBATIS</a>
-                    </li>
-                    <li>
-                        <a href="http://java.sun.com/products/jdbc/index.html">
-                            JDBC</a>
-                    </li>
-                    <li>
-                        <a href="http://db.apache.org/ojb/">
-                            Object Relational Bridge</a>
-                    </li>
-                </ul>
-
-            </subsection>        
-                        
-            <a name="view_frameworks"/>
-            <subsection name="View Frameworks">
-
-                <p>
-                    Aside from Java Server Pages, there are several other 
-                    presentation technologies available to Java web applications. 
-                </p>
-                
-                <ul>
-                    <li>
-                        <a href="http://www.freemarker.org/">
-                            Freemarker</a>
-                    </li>
-                    <li>
-                        <a href="http://www.lowagie.com/iText/">
-                            iText (PDF)</a>
-                    </li>
-                    <li>
-                        <a href="http://jaspersoft.com/">
-                            JasperReports</a>
-                    </li>
-                    <li>
-                        <a href="http://velocity.apache.org/">
-                            Velocity</a>
-                    </li>
-                    <li>
-                        <a href="http://www.w3.org/TR/xslt">XSLT</a>
-                    </li>
-                </ul>
-
-            </subsection>
-            
-           </section>
-        
+        <blockquote><p><em>
+        "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."
+        </em></p></blockquote>
+
+        <h2>Intention</h2>
+
+        <p>
+            If you would like to get started with Apache Struts you most likely want
+            to know what technologies you need to learn. This document shall give you
+            a brief overview what you need to successfully run a Struts project.
+
+            If you still can't decide if Struts is for you or if you have any questions,
+            feel free to contact us via the <a href="mail.html">Struts user mailinglist</a>.
+        </p>
+
+        <h2>Key Technologies</h2>
+
+        <a name="suspects"/>
+        <h3>What you need to know</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 and HTML</a></li>
+            <li><a href="#cycle">The HTTP Request/Response Cycle</a></li>
+            <li><a href="#java">The Java Language and Application Frameworks</a></li>
+            <li><a href="#javascript">JavaScript, AJAX, and SOAP</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 often provided where it makes sense.
+        </p>
+
+        <h3>General starting points</h3>
+
+        <p>
+            If you are not familiar with the Java language generally,then the best starting point is the
+            <a href="http://docs.oracle.com/javase/tutorial/index.html">Java Tutorial</a>.
+        </p>
+
+        <p>
+            If you are familiar with Java, but not the mentioned technologies,
+            the best overall starting point is the
+            <a href="http://docs.oracle.com/javaee/7/tutorial/doc/">Java EE Tutorial</a>.
+        </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 Struts are also used by most other Java web development products, so
+            the background information will be useful in any Java project.
+        </p>
+
+        <a name="http"/>
+        <h3>HTTP, HTML and User Agents</h3>
+
+        <p>
+            The World Wide Web was built over the Hypertext Transfer Protocol
+            <a href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">(HTTP)</a>
+            and the Hypertext Markup Language <a 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 the HTML, HTML from the browser to render the view.
+        </p>
+
+        <p>
+            If you would like to learn HTML, we recommend
+            <a href="http://www.w3.org/MarkUp/Guide/">Getting started with HTML</a> by Dave Raggett.
+        </p>
+
+        <a name="cycle"/>
+        <h3>The HTTP Request/Response cycle</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 often 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 you should learn about it.
+            There is a lot of help available in the internet, like
+            <a href="http://docs.webplatform.org/wiki/tutorials/How_does_the_Internet_work">&quot;How does the Internet work?&quot;</a>
+        </p>
+
+        <a name="java"/>
+        <h3>The Java Language and Application Frameworks</h3>
+
+        <p>
+           Struts is written in the
+           <a href="http://www.oracle.com/us/technologies/java/overview/index.html">Java programming language</a>.
+           Java is an object-orientated language, and the framework makes good use of many
+           object-orientated techniques. A good understanding of Java, and especially
+           object-orientated programming (OOP) and threading, will help
+           you get the most out of Struts.
+        </p>
+
+        <a name="reflection"/>
+        <h4>Reflection and Introspection</h4>
+        <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 Object are intended to be accessed by other objects.
+            The getters and the setters, for example.
+        </p>
+
+        <p>
+            Struts 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>
+            While it is not necessary to have a deep understanding of these concepts when you start with Apache
+            Struts, it will help you when your application grows and becomes more complex.
+        </p>
+
+
+        <a name="resources"/>
+        <h4>Properties Files and ResourceBundles</h4>
+
+        <p>
+            Java applications, including web applications, are often
+            configured using <a href="http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html">Properties</a>
+            files. Properties files are the basis for the
+            <a href="http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html">ResourceBundles</a>
+            that the framework uses to provide message resources to an application.
+        </p>
+
+        <p>The Java Tutorials provide a <a href="http://docs.oracle.com/javase/tutorial/essential/environment/properties.html">great introduction to Properties</a>.</p>
+
+        <p>
+            Java ResourceBundles use one or more Properties files to provide internationalized messages
+            to users based their <a href="http://docs.oracle.com/javase/6/docs/api/java/util/Locale.html">Locale</a>.
+            Support for localizing an application was built into the framework from the ground-up.
+        </p>
+
+        <p>
+            Again the Java Tutorials provide
+            <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/concept.html">more information</a>.
+        </p>
+
+        <a name="threads"/>
+        <h4>Threads</h4>
+
+        <p>
+            With Struts 1 you were required to know a lot about how to write code which
+            can run in a multi-threaded environment. With Struts 2 this is no longer necessary.
+            In an Struts 2 environment each action caused by a HTTP request
+            is a plain old Java object which is instanced for each request.
+        </p>
+
+        <a name="javascript"/>
+        <h3>JavaScript, AJAX, and SOAP</h3>
+
+        <p>
+            WIth HTTP and HTML you can already provide static web pages. Today this is much
+            often not longer enough and your application users might expect a interactive user interface.
+            Web developers often resort to <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>
+            to make web applications more interesting.
+        </p>
+        <p>
+            <a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a> is a technology often used by JavaScript programmers
+            to create web applications that are as interactive and responsive as desktop applications.
+            It is possible, to load a view parts of the website or just the data
+            from the (Struts) application instead of regenerating the whole view.
+        </p>
+
+        <p>
+            Apache Struts provides plugins to easily work with AJAX and even JavaScript. Where Struts can't provide
+            the necessary functionality, third parties provide extensions for the required behavior.
+        </p>
+
+        <p>
+            Another technology that can enhance the HTTP request/response cycle is <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a>.
+            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 between the
+            the business logic and the page markup. Depending on your applications need, it might be not necessary
+            for you to learn about SOAP.
+        </p>
+
+        <a name="containers"/>
+        <h3>Servlets, Filters, and Web Containers</h3>
+        <p>
+            Since Java is an object-orientated language, the
+            <a href="http://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html">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>
+            A Java-aware HTTP 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>
+            The old Struts 1 version relied heavily on servlets and good knowledge about it usually helped a lot
+            with developing web applications.
+        </p>
+
+        <p>
+            With Struts 2, you'll need only a basic understanding of Servlets. Struts actually uses a so called
+            ServletFilter to &quot;make things work&quot;. In general you are not required to write Servlets when
+            using Struts 2. It still helps to know what Servlets, Filters and Containers are.
+        </p>
+
+        <p>
+            Filters 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>
+
+
+        <a name="session"/>
+        <h3>Sessions</h3>
+
+        <p>
+            One of the key characteristics of HTTP is that it is
+            <em>stateless.</em> 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 <em>session,</em> represented as an object that
+            implements the  <code>javax.servlet.http.HttpSession</code>
+            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 <em>session id</em>
+            for this session, so that state information saved in the session can be associated with
+            multiple requests. This state information is stored in
+            <em>session attributes</em> (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 <em>timeout interval.</em>
+            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.
+        </p>
+
+        <p>
+            It is important to know that Session data most often occupies RAM memory
+            of your server. Depending on your container you may have different options to
+            bypass this.
+        </p>
+
+        <p>
+            Struts 2 provides easy ways to create and access a session.
+        </p>
+
+
+        <a name="webapp"/>
+        <h3>Web Applications</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>
+
+        <p>
+            You definitely need to learn how you can build a war file from your Struts
+            application and deploy it to your server. This might require knowledge of
+            build tools like <a href="http://maven.apache.org">Maven</a> and addition reading
+            in the documentation of your server vendor.
+        </p>
+
+        <a name="security"/>
+        <h3>Security</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, you should read the
+            <a href="http://docs.oracle.com/javaee/6/tutorial/doc/gijrp.html">Java EE tutorial</a>.
+            Other projects, like <a href="http://shiro.apache.org/">Apache Shiro</a> or
+            <a href="http://www.springframework.org/spring-security/">Spring Security</a> might also help
+            you to secure your web application.
+        </p>
+
+        <a name="jsp"/>
+        <h3>JavaServer Pages, JSP Tag Libraries, and JavaServer Faces</h3>
+
+        <p>
+            If you write a classic web app, you might need a view component.
+            One of the first of its kind was <a href="http://www.oracle.com/technetwork/java/javaee/jsp/index.html">JSP</a>.
+        </p>
+
+        <p>
+            While still powerful and fully supported by Struts, people might prefer other technologies
+            like Velocity and Freemarker. Both are also first class citizens for Struts.
+        </p>
+
+        <p>
+            All have in common that you would start writing HTML markup and add dynamic features using
+            JSP tags (same goes for Velocity and Freemarker). While it is not recommended, JSP even supports
+            adding plain Java to the markup. Reading about the
+            <a href="http://www.oracle.com/technetwork/java/index-jsp-135995.html">JSTL</a> or, even better,
+            the <a href="http://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html">Unified expression language</a>
+            is recommended.
+        </p>
+
+        <p>
+            That said, you can easily access your data model from the view. And render it appropriate.
+            If you would like to use a more modern approach, you will love to hear Struts 2 provides
+            features to return <a href="http://json.org">JSON</a>, which usually fuels AJAX driven webpages.
+            With that it is easily possible to use jQuery or <a href="http://www.angularjs.org">AngularJS</a>
+            as a front end layer and even completely discard JSP.
+        </p>
+
+        <a name="view_frameworks"/>
+        <p>
+           As mentioned, aside from Java Server Pages, there are several other
+           presentation technologies available to Struts:
+        </p>
+
+        <ul>
+            <li>
+                <a href="http://www.freemarker.org/">
+                    Freemarker
+                </a>
+            </li>
+            <li>
+                <a href="http://www.lowagie.com/iText/">
+                    iText (PDF)
+                </a>
+            </li>
+            <li>
+                <a href="http://jaspersoft.com/">
+                    JasperReports
+                </a>
+            </li>
+            <li>
+                <a href="http://velocity.apache.org/">
+                    Velocity
+                </a>
+            </li>
+            <li>
+                <a href="http://www.w3.org/TR/xslt">XSLT</a>
+            </li>
+        </ul>
+
+        <a name="xml"/>
+        <h3>Extensible Markup Language (XML)</h3>
+
+        <p>
+            The features provided by the framework rely on a number of
+            objects that are sometimes deployed using a configuration file written in
+            <a 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>
+            Luckily Struts 2 reduces the need for XML to almost zero. While a basic knowledge on XML is always good,
+            it is no longer crucial to write long XML documents to create a Struts
+            application. If you would like to read more about it, please visit the page of the

[... 124 lines stripped ...]


Mime
View raw message