In this example we will see how to create a login application using ActionForm. The following files are required for the login application.
- login.jsp
- success.jsp
- failure.jsp
- web.xml
- struts-config.xml
- LoginAction.java
- LoginForm.java
- ApplicationResource.properties
web.xml
The first page that will be called in the login application is the login.jsp page. This configuration should be done in web.xml as shown below. <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>login.jsp
We use Struts HTML Tags to create login page. The form has one text field to get the user name and one password field to get the password. The form also has one submit button, which when clicked calls the login action. <html:errors /> tag is used to display the error messages to the user. <%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html> <head> <title>Login Page</title> </head> <body> <div style="color:red"> <html:errors /> </div> <html:form action="/Login" > User Name :<html:text name="LoginForm" property="userName" /> Password :<html:password name="LoginForm" property="password" /> <html:submit value="Login" /> </html:form></body></html>struts-config.xml
The validate method in the LoginForm class is called when the Form is submitted. If any errors are found then the control is returned back to the input page where the errors are displayed to the user. The input page is configured in the action tag of strut-config file. <html:errors /> tag is used to display the errors in the jsp page. <struts-config> <form-beans> <form-bean name="LoginForm" type="com.om.LoginForm"/> </form-beans> <action-mappings> <action path="/Login" name="LoginForm" input="/login.jsp" scope="session" type="com.om.LoginAction"> <forward name="success" path="/success.jsp" /> <forward name="failure" path="/failure.jsp" /> </action> </action-mappings> </struts-config>LoginForm.java
Inside the validate method, we check whether the user name and password is entered. If not the corresponding error message is displayed to the user. The error messages are configured in the ApplicationResource.properties file. public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (userName == null || userName.length() < 1) { errors.add("userName", new ActionMessage("error.userName.required")); } if (password == null || password.length() < 1) { errors.add("password", new ActionMessage("error.password.required")); } return errors; }ApplicationResource.properties
The ApplicationResource.properties file contains the error messages. The key "error.userName.required" is used in the validate function to add a new error. Since the error messages are configured in a seperate properties file they can be changed anytime without making any changes to the java files or the jsp pages. error.userName.required = User Name is required. error.password.required = Password is required.LoginAction.java
The execute method contains the business logic of the application. Here first we typecast the ActionForm object to LoginForm, so that we can access the form variables using the getter and setter methods. If the user name and password is same then we forward the user to the success page else we forward to the failure page.public class LoginAction extends org.apache.struts.action.Action { private final static String SUCCESS = "success"; private final static String FAILURE = "failure"; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm loginForm = (LoginForm) form; if (loginForm.getUserName().equals(loginForm.getPassword())) { return mapping.findForward(SUCCESS); } else { return mapping.findForward(FAILURE); } } }<action-mappings> <action path="/Login" name="LoginForm " input="/login.jsp" scope="session" type="com.om.LoginAction"> <forward name="success" path="/success.jsp" /> <forward name="failure" path="/failure.jsp" /> </action></action-mappings>If the user name and password did not match the user will be forwarded to the failure pag.