This question: https://stackoverflow.com/questions/1619758/is-struts2-still-a-good-choice-of-web-framework-for-new-projects is about one user debating to use struts2 which may be pertinent to others making the decision.
Following is an example of Struts2, although struts has it's own tags which would make the follwing more maintainable I decided to go with plain html where possible to make it clearer how it automagically moves values to the action and then to the view.
/WEB-INF/content/hello.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<form action="hello-world">
Enter Your Name: <input type="text" name="name"/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
When the above is submitted "name" is set on the following action (If I had encapsulated name with get/set the example would work exactly the same but be longer)
package struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
public String name;
}
then this page is rendered /WEB-INF/content/hello-world.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<h1>Hello World <s:property value="name"/></h1>
</body>
</html>
This is an example of Struts2 with conventions (one extra jar on the class path), no other configuration required.