\u001B[1mSYNOPSIS\u001B[0m
    ${project.description}

    Original Maven URL:
        \u001B[33mmvn:${pkgGroupId}/struts-core/${pkgVersion}\u001B[0m
        \u001B[33mmvn:${pkgGroupId}/struts-extras/${pkgVersion}\u001B[0m
        \u001B[33mmvn:${pkgGroupId}/struts-tiles/${pkgVersion}\u001B[0m

\u001B[1mDESCRIPTION\u001B[0m
    The Apache Struts web framework is a free open-source solution for creating Java web applications.

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

    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.

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

    The framework provides three key components:

        * A "request" handler provided by the application developer that is mapped to a standard URI.
        * A "response" handler that transfers control to another resource which completes the response.
        * A tag library that helps developers create interactive form-based applications with server pages.

    The framework's architecture and tags are buzzword compliant. Struts works well with conventional REST applications
    and with nouveau technologies like SOAP and AJAX.

\u001B[1mSEE ALSO\u001B[0m
    \u001B[36mhttp://struts.apache.org/\u001B[0m
