What does an action do?
Actions do three things. First, as you probably understand by now, an action's most important role, from the perspective of the framework's architecutre, is encapsulating the actual work to be done for a given request.
The second major role is to serve as a data carrier in the framework's automatic transfer of data from the request to the view.
Finally, the action must assist the framework in determining which result should render the view that will be returned in the request response.
Whether you declare your action components with XML or Java annotations, when the framework creates your application's architecture, it'll organize your actions and other components into logical containers called packages. Many important operational attributes, such as the URL namespace to which actions will be mapped, are defined at the package level. And, importantly, packages provide a mechanism for inheritance, which among other things allows you to inherit the components already defined by the framework.
Implementing Struts 2 actions is easy. Basically, any class can be an action if it wants. It simply must provide an entry method for the framework to invoke when the action is executed. Struts2 Actions don't have to implment the Action interface. any object can informally honor the contract with the framework by simply implementing an execute() method that returns a control string.
The ActionSupport class
The ActionSupport class is a convenience class that provides default implementations of the Action Interface and several other useful interfaces, giving us such things as data validatoin and localization of error messages. If your actions extends this class, they automatically gain the use of these implementations.