Here the business class presents the Model, the JSP/HTML represents the View, and the action class represents the Controller and often acts as the Model (with associated JavaBean-style setters/getters). We can configure interceptors to intercept the requests for specific purpose, and the filter dispatcher acts as the front controller between the framework and the clients. All these things can be configured in struts.xml configuration file.For detailed introduction about the framework, see the article: Introduction to Struts2 framework.
Click Next two times. In the last screen (Web Module), check the option: Generate web.xml deployment descriptor:
Click Finish, Eclipse will generate some basic stuffs for the project.Create a Java package called net.codejava.struts under JavaResources\src directory:
Copy the following jar files from struts-2.3.8\lib directory to project’s WebContent\WEB-INF\lib directory:<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Struts2 beginner example application</title>
</head>
<body>
<center>
<h2>Calculate sum of two numbers</h2>
<s:form action="calculateSumAction" method="post">
<s:textfield name="x" size="10" label="Enter X" />
<s:textfield name="y" size="10" label="Enter Y" />
<s:submit value="Calculate" />
</s:form>
</center>
</body>
</html>In this JSP page, we use some Struts’ tags (starting with prefix s:) to build a form with two text fields and a submit button. The form would look like this:
The Struts tags are imported by the following taglib directive:<%@ taglib prefix="s" uri="/struts-tags" %>On submitting this form, the action calculateSumAction will be invoked. We will create the action class right now, and configure it in struts.xml file later.
package net.codejava.struts;
import com.opensymphony.xwork2.ActionSupport;
public class SumAction extends ActionSupport {
private int x;
private int y;
private int sum;
/**
* The action method
* @return name of view
*/
public String calculate() {
sum = x + y;
return SUCCESS;
}
// setters and getters for x, y, and sum:
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
}In this action class, we declare three private variables x, y, sum and its corresponding getters and setters. The framework will use the setters to fetch values from the input page, and use the getters to print values in result page.The method calculate() is the action method which will be invoked by the framework when the action is called. Which method to be invoked can be configured in struts.xml file. This method simply calculates sum of two numbers and returns a String which is logical name of a view. The framework will look for a matching view file and send it to the client. The method returns a String constant named SUCCESS which equals to the logical name “success”.Mapping logical view names to physical view files for action classes are configured in struts.xml file (We will configure the mapping later).Though not required, by extending the ActionSupport class we can reuse some predefined constants such as SUCCESS, INPUT, ERROR, etc. <%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sum Result</title>
</head>
<body>
Sum of <s:property value="x"/>
and <s:property value="y"/>
is:
<s:property value="sum"/>
</body>
</html>This JSP page displays values of the three variables in the action class: x, y and sum, by using Struts' <s:property> tag. <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="Struts2Beginner" extends="struts-default">
<action name="calculateSumAction" class="net.codejava.struts.SumAction"
method="calculate">
<result name="success">/Result.jsp</result>
<result name="input">/Input.jsp</result>
</action>
</package>
</struts>Create struts.xml file under JavaResources\src directory with the following content:NOTE: In Struts, action class and view mapping can be configured either by XML or annotation types. In this tutorial, we utilize the XML configuration.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts2Beginner</display-name> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>In the <filter-mapping> element, we specify that all URLs (pattern: /*) will be handled by the Struts dispatcher filter.
Click Finish and start the server. Open a web browser and type the following URL into its address bar:http://localhost:8080/Struts2Beginner/Input.jsp
The input form gets displayed, type two numbers X, Y:
Hit Calculate button and we get the result:
Notice the URL changed to the action in the address bar. Congratulations! We have successfully built, deployed and tested our first Struts application. 
To summary, in this tutorial we have learnt:
To help you memory things better, the following diagram shows the connections among components of the application:
That's how to get started with Struts framework by developing a "hello world" application.
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.