[*][b]Improved design[/b]: In contrast with Struts 1, all of the Struts 2 classes are based on interfaces. Core interfaces are HTTP independent. These APIs are not dependent on Servlet APIs.
[*][b]Simplified Actions[/b]: Struts 2 Action classes are framework independent and are simplified plain old Java objects (POJO). Any Java class with an execute() method can be used as an Action class.
[*][b]POJO forms[/b]: Struts 2 does not support the ActionForms feature. The properties that are defined in the ActionForms can be put directly on the Action classes. You do not need to use all String properties.
[*][b]Intelligent defaults[/b]: Most of the configuration elements in the Struts 2 configuration file will have default values, so there is no need to set values unless a different value is required. This helps reduce the configuration you need to do in the XML file. Struts 2's support for annotations helps make this even easier to achieve.
[*][b]Enhanced results[/b]: In Struts 2, the >forward< tag is replaced by the <result> tags. Unlike ActionForwards, Struts 2 results help in preparing the response and provide flexibility to create multiple types of output.
[*][b]Enhanced tags[/b]: Struts 2 tags don't just send output data, but also provide stylesheet-driven markup so that you can create consistent pages with less code. Struts 2 tags can now work with FreeMarker, Velocity, and similar template engines.
[*][b]Introduction of interceptors[/b]: Struts 2 provides exhaustive support for interceptors. Interceptors can be executed before and after an Action class is executed. Interceptors are configured to apply common functionality, such as workflow or validation, to a request. All the requests pass through a set of interceptors before they are sent to an Action class. After the Action class is executed, the request passes through the interceptors again in the reverse order.
[*][b]Ajax support[/b]: To create dynamic Web applications that use Ajax, Struts 2 provides an Ajax theme, which gives interactive applications a significant boost. Struts 2 tags for Ajax are based on Dojo widgets. Plug-ins are available for other frameworks as well.
[*][b]QuickStart[/b]: Deployed configuration files are reloadable; hence, many changes can be made on the fly without the need to restart the Web container.
[*][b]Stateful checkboxes[/b]: The Struts 2 framework automatically tracks checkboxes; if a checkbox is missing, the default value -- false -- is assumed. Hence, unlike in Struts 1, checkboxes do not require special handling for false values.
[*][b]Easy testing:[/b] Struts 2 Actions are HTTP independent and thus framework neutral. They can be tested easily without using mock objects.
[*][b]Use of annotations[/b]: Applications built using Struts 2 can use Java 5 annotations as an alternative to XML and Java properties configuration. Annotations minimize the need for XML. Annotations are available for Actions, interceptors, validation and type conversion.
[*][b]Easy plug-in[/b]: Struts 2 extensions can be installed by dropping the plug-in JAR file into the \WEB-INF\lib directory. No manual configuration is required.
[*][b]Easy integration with Spring[/b]: Struts 2 Actions are Spring-aware. Just adding Spring beans to an application will add Spring support.
[*][b]Easily customized controllers[/b]: Struts 1 allows the request processor to be customized per module; in Struts 2, you can customize the request handling per action, if required.