Struts2 Tutorial Part 3 – Actions 2

In this tutorial session we will create a simple struts 2 application to understand the complete flow of an action. If you want to know the clear picture about Struts2 action see our action post 1 here. If you want to get clear idea over struts 2 from the beginning please refer the below posts.

Struts2 Introduction
Struts2 HelloWorld Application
Struts2 Tutorial Part 3 – Actions 1

While develop our application, we will discuss about the details of each configuration parameter. First we have to create the home.jsp file which is the first page of the application. See the code below.


We created a simple jsp file with struts2 UI tags. We will learn about Struts2 UI tags later. As of now just keep in mind struts2 tags are like normal html tags with more functionalists. So for clear understanding consider  <s:form>  as normal  <form>  tag,  <s:textfield>  as normal  <input type='text'>  tag and so.So when we fill and submit the form it will submit the data to the url welcome.

Next we will create another jsp page where we will display the name and city what we entered in the home.jsp. See the code below.


Here also we used struts2 UI  tag <s:property> . It is used to retrieve the value from the OGNL stack where all the variables are stored. We will see about the Struts2 UI tags and OGNL stack later. As of now assume it will return the respective values.

Next we will create our struts.xml file which is the configuration file, See the code below.


See the web.xml file below.


Finally see our java file where we have our business logic.

That’s all the files needs to be created. Now we will discuss the workflow of this application to understand actions clearly. At first when the user types  http://localhost:8080/Struts2Action/  in the browser the control will go the web.xml file as we discussed in the previous chapter. In web.xml we never mentioned any index files. But we mentioned a filter to all the incoming requests.

So the control will go to the filter class. We no need to worry abouth these portions. These are all implemented by the framework itself.  Just for understanding I am explaining this.

Then the framework will look for struts.xml file. Then as we typed simply the application name alone it will look for the action with emty name. In our struts.xml file we have a action with name emty. So the framework will render the page home.jsp to the browser.

Here one important think we have to note is before sending the page to browser the framework will replace all struts2 UI tags by corresponding html tags. To understand this after the home.jsp is rendered on the browser see the source code of the page.

After rendering the page the page source code will look like below one.

Then  as in the home page we have to enter the name,city then submit the form. As we mentioned the data to the url welcome.action the control will look for it. So the request will be http://localhost:8080/Struts2Action/welcome.action . As usual the control will look for an action with name ‘welcome’. Once it identifies it will execute the corresponding class to it.

As we discussed all action methods should return a string value. Once that method returned a string value, the matching result tag will be rendered to the user. In our class com.rajesh.struts2.Welcome method welcome() we returned ‘success’ string. So welcome.jsp will be rendered to the user. If suppose our method returns string ‘error’ then the error.jsp will be rendered. If no name attribute is defined with the result tag ‘success’ will be taken as default value.


In our previous action with empty name we never mentioned any class name. Just remember that the class attribute of the action is an optional one (Discussed in previous chapter). If no class is specified it will take the result as ‘success’ by default

Another attribute for the action tag is method name. See our action welcome.

We mentioned the method name as welcome(). If we don’t specify the method name the control will look for method with name execute() inside the action class.

What is the use of this?

The main reason is we can have multiple methods inside a single class. In that situation we can mention the method name, Otherwise we can simply use the same method name execute(). Anyway it is upto us to decide.

With this knowledge we will look back our initial action with empty name “”. We never mentioned the class to it. So it will take ‘success’ by default. Then it will look for result tage with name ‘success’. We never mentioned that also. So there also it will take ‘success’ by default. Then both matches, result page rendered.

Another one important think we have to know what are all the background functions are running, while we call particular action. By default before running any action methods Struts 2 have a set of methods to run. Those are all called interceptors. We will discuss about interceptors in another chapter. As for now kepp in mind before running any action Struts 2 framework executing some methods.

With the above point in mind we will see about how the data from home page is getting travelled to the result page. As I said before running the action method the struts 2 will look for the methods to pass the data from the html form to server.

We will see this with an example. In our home.jsp we have to major data containing fields name and city.

So after we submit the data to the server the struts2 framework will look for the method setName() and setCity(). (i.e.) By default adding the word get infront of the field name and adding the field name starts with capital letter.

Now to understand this see our methods.

We have to methods setName() and setCity(). So those will get executed before the action method executes. For each url access a new instance of the class will be created. So when multiple user opens the URL it will not affect one another.

All the variables related to one session will be stored in a common stack called OGNL. So from any portion of the application we can get the value for the variables.

In the same way in our welcome.jsp the tags  <s:property value="name" />  and  <s:property value="city" />  will call getName() and getCity() methods.

Another one important think is all theses processes are happening in the server side. So only the replaced final html file will be sent back to the user. (i.e)The UI tags will not be visible at the user end.

With this we will complete this session on Struts 2 action. We will continue with action-packages and namespaces in our next session.

I have created a complete and simple .war file with source code for the example we discussed. Download and just place under Apache web apps folder and run.

If you have any issues while execution post in comments or send mail to

This entry was posted in Struts2 and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


This site uses Akismet to reduce spam. Learn how your comment data is processed.