Excerpt |
---|
The Struts 2 Blank Archetype ("blank-archetype") provides a minimal, but complete, Struts 2 application. It demonstrates some of the most basic Struts 2 concepts. Features
|
...
Code Block |
---|
$ mvn archetype:generate -B \ -DgroupId=tutorial \ -DartifactId=tutorial \ -DarchetypeGroupId=org.apache.struts \ -DarchetypeArtifactId=struts2-archetype-blank \ -DarchetypeVersion=2.1.6<version> $ ls tutorial/ $ cd tutorial $ ls pom.xml src/ |
Depending on the state of your local system you may see Maven downloading various libraries (known as "downloading the internet", which is what it seems Maven does sometimes). Be patient--Maven is basically setting up your required libraries automatically.
<version> - is the version of Struts 2 you want to use and archetype was released for, eg. 2.1.8.1 .
Staging repository
If the above command will fail because of missing archetypes in central repository, you can try to use staging repository like below
Code Block |
---|
mvn archetype:generate -B \
-DgroupId=tutorial \
-DartifactId=tutorial \
-DarchetypeGroupId=org.apache.struts \
-DarchetypeArtifactId=struts2-archetype-blank \
-DarchetypeVersion=<version>
-DarchetypeCatalog=http://people.apache.org/builds/struts/<version>/m2-staging-repository/
|
Project Structure
The source code structure follows the normal Maven directory structure. The blank-archetype does not include all of the directories listed in the Maven structure reference page.
Our project's structure looks like this:
...
Once we've run the application we can see that it works by visiting localhost:8080/tutorial/example/HelloWorldWelcome.action
as a sanity check.
...
The application consists of a few test actions demonstrating simple validation and package-level property (resource) files. The most interesting URLs are as follows (assuming we used groupId=tutorial
):
URL | Description |
---|---|
| Handled by wildcard mapping |
| Handled by explicit mapping, demonstrates package-level properties |
| Handled by explicit mapping with method wilcard (see the |
Application Configuration
The default Struts 2 configuration file is contained in src/main/resources/struts.xml
. It includes an additional configuration file, src/main/resources/example.xml
. The application's mappings are contained in the example.xml
file. The struts.xml
file sets some constants.
See the struts.xml page for more information about the struts.xml
file. For more information regarding what's contained in typical struts.xml
files start at the Configuration Elements page, which contains links to a bunch of information. See the Configuration Files page for more information regarding additional Struts 2 configuration files, including links to the files that set all the Struts 2 default configurations.
Welcome.action
The mapping for this action is handled by a "catch-all" mapping in example.xml
:
Code Block |
---|
<action name="*" class="tutorial2.example.ExampleSupport">
<result>/example/{1}.jsp</result>
</action>
|
This mapping is the last mapping contained in example.xml
--anything not handled by mappings appearing before it in example.xml
will be caught by this mapping. This mapping will look for JSP files in src/main/webapp/example/*.jsp
. Since there's a Welcome.jsp
in that directory, we're all set. See the Wildcard Mappings page for more information on how Struts 2 can use wildcard mappings.
HelloWorld.action
The mapping executes the HelloWorld action, contained in src/main/java/tutorial/example/HelloWorld.action
. This action retrieves a message from a package-level properties file, contained in src/main/resources/tutorial/package.properties
. See the Localization page for more information about how Struts 2 handles message resources (it's pretty cool).
Login.action
This is another wildcard mapping:
Code Block |
---|
<action name="Login_*" method="{1}" class="tutorial2.example.Login">
<result name="input">/example/Login.jsp</result>
<result type="redirectAction">Menu</result>
</action>
|
In the application the Login action is reached via a link, but not directly to /tutorial/example/Login.action
. The link is actually /tutorial/example/Login_input.action
. Reaching the Login action this way bypasses validation: if we hit the Login action directly we'll get a validation error.
The validation configuration is contained in /src/main/resources/tutorial/example/Login-validation.xml
. It checks for the presence of the username
and password
properties (form values). It uses messages stored in the package.properties
file (in the same directory). See the Validation page for more information regarding Struts 2 validation.