List some benefits that Struts provides that you don't commonly see in other MVC architectures:
- Widespread adoption and support. Struts has become the de facto MVC framework for J2EE projects.
- Use of an easily configurable and maintainable application XML file that handles the flow of your application (and provides other functions). For example, imagine your application involves a JSP page that needs to gather employee information and insert this into a database. The XML file will have as one of its mappings /insertEmployee. This mapping can then contain what Action class will be called, whether you want validation to take place, whether you want the action to catch any particular Exceptions, and possible forwarding directions.
- Dynamic Form Beans created automatically. In the struts-config.xml mentioned above, you can simply define the parameters you want a bean to have and associate this bean with a mapping and when a form submits it will automatically populate this bean that you created in your xml file. Need to add or remove a few fields- just remove them in the XML file and the bean created dynamically will have your changes.
- Declarative Exception Handling. No need to hard code Exceptions that can be thrown by your Model layer into your controller or Command objects. Define these Exceptions in the struts-config.xml file and also where you want to forward to when particular Exceptions are thrown. Custom error messages you want to display never need to be hard-coded in your JSP pages or in any of your classes.
- Eliminate the coding of many helper classes. Various Jakarta Commons packages come with Struts that make it very easy to tackle annoying and mundane tasks. For example, say you have a bean created that has all String parameters representing the fields of your form that are populated when the user submits the page. At some point you may need to get these properties into a more business oriented object (Data Transfer Object or Value Object). You could go through the trouble of building a helper class to call all the get and set methods and do type conversions, or you could simply call BeanUtils.copyProperties( objectCopiedTo, objectToCopyFrom ) and all the conversions are done for you. Saves the annoying tedious work of having to build helper classes.
- Action Classes. These are analogous in functionality to Command objects (if you are used to that pattern). The nice thing about Struts is a request processor and the main controller (ActionServlet) is already created for you. You just create a mapping in the config.xml file and tell that mapping what Action class it needs to call and you just worry about coding the execute method of your Action class. Various other subclasses of this basic Action class come with Struts that you can extend to do some other powerful things ( FowardAction, DispatchAction, LookupDispatchAction, etc.).
- ApplicationResources. Create simple property files that are then declared in your struts-config.xml file and your entire application has easy access to these properties with the bean:message tag construct. Custom errors and other messages to display are also coded here. Eliminates the need to hard code titles, headers, form elements, validation error messages, Exception error messages, etc.
- A flexible and powerful templating system (Tiles) that allows you to define page fragments, enclose them in page definitions, and reuse these fragments and definitions across multiple pages. Tiles can be dynamically inserted and modified, and each tile can have its own Controller, facilitating even more flexibility.