Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment:

Fix markup

Preface

Struts Action Framework 2 is a popular,

...

easy-to-use

...

MVC

...

framework.

...

For

...

more

...

information

...

on

...

the

...

SAF

...

project,

...

please

...

visit

...

the

...

SAF

...

Project

...

Home

...

.

...


This

...

document

...

will

...

help

...

you

...

to

...

get

...

started

...

with

...

the

...

framework,

...

enabling

...

you

...

to

...

run

...

the

...

examples

...

and

...

demonstrations

...

provided

...

even

...

if

...

you

...

are

...

not

...

an

...

experienced

...

Java

...

web

...

application

...

developer.

...

Nevertheless,

...

the

...

framework

...

is

...

geared

...

towards

...

developers

...

that

...

have

...

an

...

understanding

...

towards

...

certain

...

technologies.

...

Before

...

diving

...

deeper

...

into

...

how

...

the

...

SAF

...

works,

...

it

...

is

...

recommended

...

that

...

you

...

have

...

some

...

knowledge

...

of

...

the

...

supporting

...

technologies.

{:=
Panel
title
Supporting
Technologies
} - Java -
  • Java
  • Servlets,
  • JSP,
  • and
  • Tag
  • Libraries
  • JavaBeans
  • HTML and HTTP
  • Web Containers (such as Tomcat)
  • XML

For more about any of the supporting technologies, visit the Key Technologies page on the Apache Struts website.

Downloads and Resources
Anchor
Website&downloads
Website&downloads

To get started with the framework, download the distribution and browse some of the online resources.

Download the Distribution

Note

A release of SAF 2 may not yet be available.

The full distribution can be downloaded form the Apache Struts website. The distribution contains the struts-action2.jar file, a copy of all the documentation, sources, all required and optional dependencies,and example applications. For more information on how to build the framework from source or even from a clean checkout, please refer to Building the Framework from Source.

Browse the Resources

There are many online resources available. Here are links to help you find your way:

Distribution Quickstart

Overview

The distribution contains the following directory layout:

No Format

- JavaBeans
- HTML and HTTP
- Web Containers (such as Tomcat)
- XML
{panel}

For more about any of the supporting technologies, visit the [Key Technologies page|http://struts.apache.org/struts-action/userGuide/preface.html] on the Apache Struts website.

h2. Downloads and Resources {anchor:Website&downloads}

To get started with the framework, download the distribution and browse some of the online resources.

h3. Download the Distribution

{note}A release of SAF 2 may not yet be available.{note}

The full distribution can be downloaded form the [Apache Struts website|http://struts.apache.org/downloads.html]. The distribution contains the {{struts-action2.jar}} file, a copy of all the documentation, sources, all [required and optional dependencies|Dependencies],and example applications. For more information on how to build the framework from source or even from a clean checkout, please refer to [Building the Framework from Source].

h2. Browse the Resources

There are many online resources available. Here are links to help you find your way:
- [Download SAF2|http://struts.apache.org/downloads.html] \- download the framework distribution
- [Join the Forums|http://forums.opensymphony.com/category.jspa?categoryID=5] \- The forums are full of active developers, contributors, and power users - often even available for chat. This is the best and quickest way to get a question answered.
- [Subscribe to Mailing List and post a question, or browse Mail Archive|http://struts.apache.org/mail.html]. (You probably want to browse the archive or forum first. All posts from the forum are posted to the mailing lists, and vice versa.
- [Subversion Repository|http://svn.apache.org/viewcvs.cgi/struts/action2/] \- Browse the source.
- [Confluence Wiki|http://confluence.twdata.org/] \- Read it here first! The project documentation is created on the wiki and then posted as HTML to the website. 
- [JIRA Issue Tracker|http://issues.apache.org/struts/] \- Browse or file enhancements requests and defect reports.
- [Apache Struts Home|http://struts.apache.org/]

h2. Distribution Quickstart


h3. Overview

The distribution contains the following directory layout:
{noformat}
dist/
docs/
lib/
src/
src/java/template/
webapps/
README.txt
build.properties
build.xml
ivy.xml
osbuild.xml
pom.xml
struts-action-(VERSION).jar
struts-action-(VERSION).zip
struts-action-(VERSION)-src.jar
{noformat}
The {{docs}} directory contains the current Javadocs, the full user documentation including the document you are reading, and taglib documentation, as well as Clover, JUnit and dependency reports for the build.

The {{dist}} directory contains framework files with different packaging:
- 

The docs directory contains the current Javadocs, the full user documentation including the document you are reading, and taglib documentation, as well as Clover, JUnit and dependency reports for the build.

The dist directory contains framework files with different packaging:

  • struts-action-nostatic-<version>.jar:

...

  • containing

...

  • only

...

  • the

...

  • framework

...

  • without

...

  • the

...

  • static

...

  • content

...

  • struts-action-static-<version>.zip:

...

  • containing

...

  • the

...

  • required

...

  • framework

...

  • static

...

  • dependencies

...

The

...

lib

...

directory

...

contains

...

the

...

required

...

as

...

well

...

as

...

optional

...

Dependencies for the framework,

...

organized

...

in

...

subdirectories

...

to

...

represent

...

different

...

optional

...

configurations:

{
No Format
}
lib/
      ajax
      bootstrap
      build
      cewolf
      default
      fileupload
      fileupload-cos
      fileupload-pell
      hibernate
      jasperreports
      jfree
      pico
      plexus
      portlet
      quickstart
      sitemesh
      source
      spring
      tiger
      tiles
      velocity
      xslt
{noformat}

Note

...

that

...

none

...

of

...

the

...

optional

...

packages

...

are

...

required

...

to

...

use

...

the

...

framework.

...

If

...

you

...

wish

...

to

...

use

...

certain

...

features

...

such

...

as

...

JasperReports

...

or

...

Java

...

5

...

(Tiger)

...

generics

...

and

...

annotation

...

support,

...

then

...

you

...

must

...

include

...

the

...

optional

...

packages.

...

The

...

framework

...

also

...

comes

...

packaged

...

with

...

all

...

the

...

source

...

files

...

and

...

templates

...

for

...

the

...

JSP

...

tags.

...

Running

...

demos

...

with

...

QuickStart
Anchor
Running demos
Running demos

The framework provides a slick way to jump into web development called QuickStart. Essentally, QuickStart is combination of technologies and conventions. The key technology is the ability to run web applications "out of the box" with a stripped-down Jetty container.

With QuickStart, running the demos is as easy as can be. You just need to run:

Code Block
{anchor:Running demos}

The framework provides a slick way to jump into web development called QuickStart. Essentally, QuickStart is combination of technologies and conventions. The key technology is the ability to run web applications "out of the box" with a stripped-down [Jetty|http://jetty.mortbay.org/jetty/] container.

With QuickStart, running the demos is as easy as can be. You just need to run:
{code}
> java -jar webwork.jar quickstart:<application-name>
{code}

from

...

the

...

distribution's

...

top

...

directory,

...

where

...

<application-name>

...

is

...

one

...

of

...

the

...

subdirectory

...

names

...

under

...

webapps/

...

.

...

Each

...

subdirectoy

...

hosts

...

a

...

demo

...

application.

...

If

...

you

...

want

...

to

...

start

...

the

...

shopping-cart

...

webapp,

...

the

...

startup

...

command

...

would

...

be:

{
Code Block
}
> java -jar webwork.jar quickstart:shopping-cart
{code}

One

...

the

...

application

...

starts

...

up,

...

point

...

your

...

browser

...

to

...

http://localhost:8080/shopping-cart/

...

,

...

and

...

you

...

should

...

be

...

ready

...

to

...

go.

...

Several

...

example

...

appliations

...

are

...

included

...

in

...

the

...

distribution.

blank

Not really an example application, but a blank web application template to use as the base for your own applications

cookbook

A "how to" application that displays the full source code for each "recipe".

mailreader

The infamous Struts MailReader application.

portlet

Demonstration of our porlet integration (to be deployed in a Portal Server) - see Portlet Tutorial to read more about portlets

shopping-cart

Simple example application demonstrating various aspects of the framework

showcase

Extensive demonstration of all tag and AJAX features, along with other examples and some best practices

starter

Basic web application that you can use as a starting point for experimenting with framework features - one could almost call it a "playground" application

You can review the QuickStart documentation to learn more about how it works and how you can utilize QuickStart with your own applications.

Running Demos with Your Favorite Web Container
Anchor
Running demos
Running demos

In order to deploy applications and demos to your favorite servlet container (also called web container) such as Apache Tomcat or Caucho Resin, you will need to build WAR files from the webapps directory. You will find an Antbuild file there which will provide you with an easy way to build your own WARs.

Note
titleTo Quickstart or not to Quickstart?

Quickstart is a handy tool for development of your applications. We recommend that you give QuickStart a try, to see if it meets your development needs. However, QuickStart is not meant to be your sole environment for web application development. QuickStart is meant to help you rapidily create proof-of-concepts and so that you can see the result. We recommend you always at least test your work under other applications servers, such as Tomcat, Resin, or even the standard, standalone version of Jetty.

To build a web application archive (WAR), simply run:

Code Block
 
|| blank | Not really an example application, but a _blank_ web application template to use as the base for your own applications |
|| cookbook | A "how to" application that displays the full source code for each "recipe". |
|| mailreader | The infamous Struts MailReader application.
|| portlet | Demonstration of our porlet integration (to be deployed in a Portal Server) - see [Portlet Tutorial] to read more about portlets |
|| shopping-cart | Simple example application demonstrating various aspects of the framework |
|| showcase | Extensive demonstration of all tag and AJAX features, along with other examples and some best practices |
|| starter | Basic web application that you can use as a starting point for experimenting with framework features - one could almost call it a "playground" application |

You can review the [QuickStart documentation|QuickStart] to learn more about how it works and how you can utilize QuickStart with your own applications.

See below for a more detailed description of how the blank application helps you to easily create your own WebWork-based applications.

h2. Running Demos with Your Favorite Web Container {anchor:Running demos}

In order to deploy applications and demos to your favorite servlet container (also called web container) such as [Apache Tomcat|http://jakarta.apache.org/tomcat/] or [Caucho Resin|http://www.caucho.com/], you will need to build WAR files from the webapps directory. You will find an Antbuild file there which will provide you with an easy way to build your own WARs.

{note:title=To Quickstart or not to Quickstart?}
Quickstart is a handy tool for development of your applications. We recommend that you give QuickStart a try, to see if it meets your development needs. However, QuickStart is not meant to be your sole environment for web application development. QuickStart is meant to help you rapidily create proof-of-concepts and so that you can see the result. We recommend you always at least test your work under other applications servers, such as Tomcat, Resin, or even the standard, standalone version of Jetty.
{note}

To build a web application archive (WAR), simply run:
{code}
> ant build -Dwebapp=$APP
{code}
where {{$APP}} is the name of the web application you want to build. After the build is finished, the fully-built WAR file can be found in the {{dist}} directory. You may deploy this file to any servlet container.

To build the 

where $APP is the name of the web application you want to build. After the build is finished, the fully-built WAR file can be found in the dist directory. You may deploy this file to any servlet container.

To build the {{showcase}]

...

aplication,

...

substite

...

"showcase"

...

for

...

$ID.

{
Code Block
}
> ant build -Dwebapp=showcase
{code}

To

...

deploy

...

the

...

built

...

showcase.war

...

to

...

Tomcat,

...

move

...

or

...

copy

...

the

...

WAR

...

to

...

$TOMCAT_HOME/webapps/

...

or

...

use

...

the

...

Tomcat

...

Manager

...

Application

...

to

...

upload

...

and

...

deploy

...

the

...

WAR.

...

After

...

the

...

WAR

...

is

...

deployed

...

(and

...

your

...

server

...

is

...

started),

...

point

...

your

...

browser

...

to

Code Block
 

{code}
> http://localhost/showcase
{code}

Of

...

course,

...

if

...

the

...

server

...

is

...

not

...

local,

...

substitute

...

the

...

IP

...

or

...

hostname

...

for

...

"localhost",

...

including

...

a

...

port

...

designation

...

if

...

needed.

...

If

...

you

...

are

...

not

...

deploying

...

the

...

Showcase

...

application,

...

then

...

substitute

...

the

...

appropriate

...

application

...

name

...

for

...

"showcase"

{:=
Info
title
Deploying
the
Examples
}

The

framework

build

copies

the

sources

of

each

bundled

web

application

to

{{

dist/webapps/$APP

}}

.

The

build

also

compiles

the

sources

for

each

appolication

and

creates

a

WAR

at

{{

dist/webapps/$APP.war

}}

.

However,

these

WAR

files

are

NOT

ready

to

be

deployed.

These

WARs

do

not

include

any

of

the

JAR

files.

(Omitting

the

JARS

reduces

the

size

of

the

download

by

almost

200mb.)

To

include

the

dependant

JARs,

run

Ant

in

the

{{

dist/webapps

}}

directory,

and

new

WARs,

with

all

the

JARs,

are

placed

in

{{

dist/webapps/dist.

Your First SAF2 Application
Anchor
Installing
Installing

To get started on your own application, you can utilize the blank template, run the Ant task, or just setup your own from scratch.

Using the Blank template

The blank web application in the distribution's webapp directory is meant as a template. Make a copy of "blank" and use the copy as the basis for your application.

Run the Ant task

While it's simple enough to copy a directory tree, there is an even easier way to get started. In the webapps directory, there is a build.xml file. The new task of this Ant build file can create fresh, empty web application for you. Just add content!

Code Block
}}.
{info}

h2. Your First SAF2 Application {anchor:Installing}

To get started on your own application, you can utilize the blank template, run the Ant task, or just setup your own from scratch.

h3. Using the Blank template

The blank web application in the distribution's {webapp} directory is meant as a template. Make a copy of "blank" and use the copy as the basis for your application. 

h3. Run the Ant task

While it's simple enough to copy a directory tree, there is an even easier way to get started. In the {{webapps}} directory, there is a {{build.xml}} file. The {{new}} task of this Ant build file can create fresh, empty web application for you. Just add content! 

{code}
> cd /projects/Apache/struts-current/action2/webapps
> ant new
{code}

The

...

Ant

...

buildfile

...

will

...

prompt

...

you

...

for

...

a

...

the

...

name

...

of

...

your

...

new

...

application.

...

Setting

...

up

...

from

...

Scratch

...

If

...

for

...

some

...

reason

...

the

...

blank

...

template

...

doesn't

...

work

...

for

...

you,

...

it's

...

not

...

so

...

hard

...

to

...

setup

...

a

...

SAF-based

...

application

...

from

...

scratch.

...

Structure

...

of

...

your

...

web

...

application

...

  • Setup

...

  • a

...

  • file

...

  • structure

...

  • for

...

  • your

...

  • application.
Code Block
 

{code}
/mywebapp/
/mywebapp/template/
/mywebapp/META-INF/
/mywebapp/WEB-INF/
/mywebapp/WEB-INF/classes/
/mywebapp/WEB-INF/lib/
/mywebapp/WEB-INF/lib/CORE&OPTIONAL *.jar
/mywebapp/WEB-INF/web.xml
{code}

* Copy to your {{
  • Copy to your webapp/lib

...

  • directory
    • the struts-action-(VERSION).jar

...

    • ,
    • all the *.jar

...

    • files

...

    • in

...

    • /lib/default

...

    • ,
    • and any necessary optional {{*.jar}

...

    • files

...

    • in

...

    • {{/lib/

...

    • (optional

...

    • configuration)

...

    • }}.

...

(tick) If you need to customize your own templates (how HTML is rendered from webwork UI tags), copy into your webapp/ directory the /src/java/template

...

directory.

...

Minimum Set of Libraries and Config Files

The following files are a minium requirement for your application.

Filename

Description

struts-action.jar

...

Framework

...

library

...

itself,

...

found

...

in

...

distribution

...

root

...

directory

xwork.jar

...

XWork

...

library

...

on

...

which

...

WebWork

...

is

...

built

oscore.jar

...

OSCore,

...

a

...

general-utility

...

library

...

from

...

OpenSymphony

ognl.jar

...

Object

...

Graph

...

Navigation

...

Language

...

(OGNL),

...

the

...

expression

...

language

...

used

...

throughout

...

the framework

commons-logging.jar

...

Commons

...

logging,

...

which

...

WebWork

...

uses

...

to

...

support

...

transparently

...

logging

...

to

...

either

...

Log4J

...

or

...

JDK

...

1.4

...

+

freemarker.jar

...

All

...

UI

...

tag

...

templates

...

are

...

written

...

in

...

Freemarker,

...

which

...

is

...

also

...

a

...

good

...

option

...

for

...

your

...

views

spring*.jar

...

The

...

default

...

dependency

...

injection

...

container

...

for

...

the

...

framework.

...

web.xml

...

J2EE

...

web

...

application

...

configuration

...

file

...

that

...

defines

...

the

...

servlets,

...

JSP

...

tag

...


libraries,

...

and

...

so

...

on

...

for

...

your

...

web

...

application

action.xml

...

WebWork

...

configuration

...

file

...

that

...

defines

...

the

...

actions,

...

results,

...

and

...

interceptors

...

for

...

your application

The library files (*.jar

...

)

...

needs

...

to

...

be

...

copied

...

to

...

your

...

/mywebapp/WEB-INF/lib/

...

directory.

...

If

...

you

...

need

...

optional

...

functionalities

...

requiring

...

dependencies

...

on

...

optional

...

JARs,

...

those

...

JARs

...

need

...

to

...

be

...

copied

...

to

...

this

...

directory

...

too.

...

Setup web.xml

...

Wiki Markup
Create an {{web.xml}} file in {{\[webapp\]/WEB-INF}} (or merge into it the framework resources).

{:=
Code Block
title
web.xml
}
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>My Application</display-name>
  <filter>
    <filter-name>action2</filter-name>
    <filter-class>org.apache.struts.action2.dispatcher.FilterDispatcher</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>action</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>
{code}

The

...

standard{{web.xml}

...

registers

...

FilterDispatcher

...

to

...

enable

...

framework

...

functionality

...

for

...

your

...

requests.

...

The

...

ContextLoaderListener

...

set

...

ups

...

Spring

...

as

...

our

...

dependency

...

injection

...

conitainer.

...

The

...

framework

...

uses

...

Spring

...

internally,

...

and

...

you

...

may

...

wish

...

to

...

use

...

it

...

to

...

deploy

...

your

...

own

...

objects.

...

(lightbulb) See also:

...

web.xml

...

Setup action.xml

...

Wiki Markup
Create a skeleton {\[action.xml}} file in {{/$APP/WEB-INF/classes/}}.

{:=
Code Block
title
action.xml
}
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
"http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">

<xwork>	<!-- Include framework defaults (from Struts Action JAR). -->
	<include file="action-default.xml" />

	<!-- Configuration for the default package. -->
	<package name="default" extends="action-default">
	</package>
</xwork>

{code}

For

...

now,

...

the

...

action.xml

...

does

...

only

...

two

...

things:

...

  • It

...

  • tells

...

  • the

...

  • framework

...

  • that

...

  • it

...

  • should

...

  • import

...

  • the

...

  • configuration

...

  • information

...

  • from

...

  • action-default.xml

...

  • .

...

  • (This

...

  • file

...

  • is

...

  • located

...

  • at

...

  • the

...

  • root

...

  • of

...

  • the

...

  • struts-action.jar

...

  • ,

...

  • so

...

  • it

...

  • is

...

  • sure

...

  • to

...

  • be

...

  • found.)

...

  • It

...

  • defines

...

  • a

...

  • default

...

  • package

...

  • (with

...

  • the

...

  • <package>

...

  • section)

...

  • where

...

  • framework

...

  • elements

...

  • like

...

  • actions

...

  • ,

...

  • results

...

  • and

...

  • interceptors

...

  • are

...

  • registered.

...

(lightbulb) See also:

...

action.xml

...