1 在Myeclipse 中新建一个Web project,如图,点击Finish。
2 右击项目名z-myfirstproject,选择Myeclipse---Add Struts Capabilities
3 在出现的如下界面中,将包名称改为自己的包名称:yan.struts,其他的默认即可,点击确定。
4 完成以上步骤后,会在项目目录中自动添加一些jar包和文件等,如图。
5 点击打开 strust-config.xml,如下,右击空白处,选择 New ---Form Action and JSP,
6 在出现的Add Struts Capabilities界面中,输入user case为login,因为要做一个登录的用例。同时可以在下面的optional Details中的form Properties中点击Add按钮添加属性。
7 这里添加两个Form表单属性,一个是username ,一个password,如下图。
8 如下图,选中Create JSP form选项,Superclass选择 ActionForm。点击Next
9 在出现的界面中的Optional Details中,选择Forwards,点击Add添加一个Forward。
10 点击Add ,在出现的界面中填写Forward,点击Add按钮。然后在Add Struts Capabilities界面中点击finish 按钮。
11 以上操作完成后,会在项目中添加几个文件,如下图。
12 打开WebRoot目录下的form下的login.jsp页面,可以看到系统自动生成了登录页面,代码如下:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <html> <head> <title><bean:message key="login.hello"/></title> </head> <body>
<html:form action="/login.do"> username : <html:text property="username"/><html:errors property="username"/><br/> password : <html:password property="password"/><html:errors property="password"/><br/> <html:submit/><html:cancel/> </html:form> </body> </html> |
13 在src目录下的yan.struts.form目录下自动生成LoginForm.java,在该Java类中编写validate()函数,进行表单验证,它完成的功能是:如果表单中输入的username为空或者password为空,则生成表单验证错误。返回错误结果给login页面。代码如下:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub ActionErrors errors=new ActionErrors(); if(username==null||username.length()<1) { errors.add("username",new ActionMessage("login.error.username")); //这里username对应的是login.jsp中<html:errors property="username"/> } if(password==null||password.length()<1) { errors.add("password",new ActionMessage("login.error.userpassword")); //这里password对应的是login.jsp中<html:errors property=" password "/> } return errors; } |
当用户提交了HTML表单后,struts框架将自动把表单数据组装到ActionForm中,Actionform中的属性和HTML表单中的字段一一对应。ActionForm还提供数据验证方法,以及把属性重新设置为默认值的方法。Struts框架中定义的ActionForm类是抽象的,必须在应用中创建它的子类,来存放具体的HTML表单数据。
ActionForm实质是一种JavaBean,不过它除了具有javabean的常规方法,还有两种特殊方法:validate()用于表单验证;reset()把属性重新设置为默认值。
当用户提交了HTML表单后,struts框架会自动把表单数据组装到ActionForm中,如果在
Struts-config.xml配置文件中mapping配置中有 validate=true这一选项,则接下来struts框架会自动调用ActionForm中vlidate()方法进行表单验证。如果Validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。如果ActionErrors中包含ActionMessage对象,就表示发生了错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过
<html:errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。
14 上面的代码中用到了 new ActionMessage("login.error.username"),这里的
login.error.username 需要在ApplicaitonResources.properties中定义。
打开ApplicaitonResources.properties(它在src----yan.struts目录下)
右击 ApplicaitonResources.properties,选择Openwith ------Myeclipse Property Editor,打开编辑器,点击Add 按钮添加
15 打开LoginAction.java,在该类中有一个execute()方法,它完成对表单信息的业务逻辑验证以及对相关处理。编辑该方法如下:
public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; String username1=loginForm.getUsername(); String username=null; try { username=new String(username1.getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //以上将form表单中获得用户名转换为UTF-8格式。 String password=loginForm.getPassword(); ActionMessages errors=new ActionMessages(); String badusername="admin"; String badpassword="123456"; if(username.equals(badusername)) { errors.add("username",new ActionMessage("login.error.badusername",badusername)); //如果用户名验证失败,将ActionMessage对象保存到ActionMessages对象errors中。 //login.error.badusername对应消息资源文件中的login.error.badusername的值。 saveErrors(request,errors); //保存ActionMessages对象errors到request范围。 return new ActionForward(mapping.getInput()); //返回ActionForward对象,Struts框架会把请求转发到视图组件login.jsp中,通过来显示错误信息。 } if(password.equals(badpassword)) { errors.add("password",new ActionMessage("login.error.badpassword",badpassword)); saveErrors(request,errors); return new ActionForward(mapping.getInput()); } request.setAttribute("username",username); request.setAttribute("password",password); //将username和password的值存入request范围内,可以传递到下一页面。 return mapping.findForward("login-success");//返回下一页面,login-success对应struts-config.xml中<forward>属性 } } |
所有的Action类都是org.apache.struts.action.Action的子类,Action子类应该覆盖父类的execute()方法,当ActionForm被创建,并且表单验证顺利通过后,struts框架就会调用Action类的execute()方法,该方法的包含如下参数:
ActionMapping:包含了这个Action的配置信息,和struts-config.xml文件中的<action>元素对应。
ActionForm:包含了用户的表单数据,当struts框架调用execute()方法时,ActionForm中的数据已经通过了表单验证。
HttpServletRequest:当前的HTTP请求对象。
HttpServletResponse:当前的Http相应对象。
16 在WebRoot下新建success.jsp文件,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> |