这里 Struts版本:选择Stts12。关于 Struts版本的区别会在第七章讲到。在Base package for new classes中用自定义的名称(fdu取代原来的 yourcompany L SSHDemo ≥ myeclipse struts e bean servce B Application Resources CN properties E Application ResourcesEN- properties c WebRoot C META-INF 色WEB-INF e classes eib x,struts-configmex r struts-config xml T struts-htmltld T' struts-logictld T struts-nested tld T' struts-tilestld x validator-rules xml xT web. xml 了 login_failed jsp 了 login_ succeed. jsp J login. jsp x. metadata X.mystrutsda 然后我们在 struts目录下,添加 action、form、 service、bean、dao等分层目录 2,2 Struts基本开发 2.21创建登录页面 首先,我们在 WebRoot目录下创建一个用户登录页面 login. jsp。该页面只有一个简单的用 户登录表格
6 这里 Struts 版本:选择 Struts 1.2。关于 Struts 版本的区别会在第七章讲到。在 Base package for new classes 中用自定义的名称(fdu)取代原来的 yourcompany。 然后我们在 struts 目录下,添加 action、form、service、bean、dao 等分层目录。 2.2 Struts 基本开发 2.2.1 创建登录页面 首先,我们在 WebRoot 目录下创建一个用户登录页面 login.jsp。该页面只有一个简单的用 户登录表格
<form action="userAction do?action=login" method="post"> <table ali <tr> <td>UserName </td> <td>Password </td> <td><input name="password" value=""/x</td> <tdx<input type="submit value="Submit"/></td> <td><input type="reset" value="Reset"/></td> </tr> </table> </form> 页面显示效果为 Welcome to JIYAYUn Bank! PassWord 同时我们编写一个简单的登录成功页面 login_ succeed jsp和登录失败页面 login failed. jsp 2.22创建 User Action Form 接下来,我们在form目录下建立一个 UserForm java文件。 UserForm类继承 struts框架的 Action Form类。具体如下: import org. apache struts action. ActionForm public class UserForm extends ActionFormi private string username; private string password //get and set methods 注意:1)这里的 User form的属性 username和 password名称需要和 Ilogin jsp中的< input name=" username" value=""/>name保持一致 2)需要给这两个属性实现get和set方法 7
7 <h1 align="center">Welcome to Alice Bank!</h1> <br/> <form action="userAction.do?action=login" method="post" > <table align="center"> <tr> <td>UserName: </td> <td><input name="username" value=""/></td> </tr> <tr> <td>Password: </td> <td><input name="password" value=""/></td> </tr> <tr> <td><input type="submit" value="Submit"/></td> <td><input type="reset" value="Reset"/></td> </tr> </table> </form> 页面显示效果为: 同时我们编写一个简单的登录成功页面 login_succeed.jsp 和登录失败页面 login_failed.jsp。 2.2.2创建 UserActionForm 接下来,我们在 form 目录下建立一个 UserForm.java 文件。UserForm 类继承 struts 框架的 ActionForm 类。具体如下: import org.apache.struts.action.ActionForm; public class UserForm extends ActionForm{ private String username; private String password; //get and set methods … } 注意: 1) 这里的UserForm的属性username和password名称需要和login.jsp中的<input name="username" value=""/>name保持一致。 2) 需要给这两个属性实现get和set方法
2.23创建用户 Action 然后,我们在 action目录下建立一个 UserAction. java文件。 UserAction类继承 struts框架的 DispatchAction类 在使用 Struts动作时,每一个 Action都需要编写一个类,并且要在 struts-config xm进行配 置。这对于一个拥有很多 Action的Web程序来说,工作量是非常大的。为此, Struts提供了 DispatchAction类,这个类允许将一个 Action作为一个方法来调用。在web浏览器中通过请求参数 来指定要调用的动作。虽然 DispatchAction类是一个抽象类,但其中却没有一个抽象方法。因此, DisplatchAction的子类不用实现任何 DisplatchAction类中的方法。但如果要处理 Action代码,就必 须根据相应的 Action来编写 Action方法。一个 Action方法除了方法名和 execute方法不一样外,其 他的都和 execute方法完全一样。但编写 Action方法时要注意, Action方法名必须和用于指定动作 的请求参数值一致(大小写也必须一致)。在下面的例子中演示了通过 DispatchAction类实现方法 和 Action的对应 方法名称可自定义,但方法的参数需要和 DispatchAction类的 execute方法参数一致。 import org. apache struts actions. DispatchAction; public class UserAction extends DispatchAction i public ActionForward login(ActionMapping mapping, ActionForm form, Httpservletrequest request htTpservletresponse response throws Exception User Form user Form=(UserForm) formi String userName=user Form. getUsername() String password=userForm getPassword)i if( equals(userName)&&!""equals(password &&"alice"equals(userName)&&123456.equals(password))i return mapping. findForward("loginsucceed")i Else return mapping. findForward("loginFailed")i public ActionForward logout(ActionMapping mapping, ActionForm form, Httpservletrequest request Httpservletresponse response throws Exception //TODO return mapping. findForward("index")i 这里我们实现用户的两个操作用户登录和登出,这里仅作简单的验证,用户名和密码不为空,且默认为 alice用户登录
8 2.2.3 创建用户 Action 然后,我们在action目录下建立一个UserAction.java文件。UserAction类继承struts框架的 DispatchAction类。 在使用Struts 动作时,每一个Action 都需要编写一个类,并且要在struts-config.xml 进行配 置。这对于一个拥有很多Action 的Web 程序来说,工作量是非常大的。为此,Struts 提供了 DispatchAction 类,这个类允许将一个Action 作为一个方法来调用。在Web 浏览器中通过请求参数 来指定要调用的动作。虽然DispatchAction 类是一个抽象类,但其中却没有一个抽象方法。因此, DisplatchAction的子类不用实现任何DisplatchAction 类中的方法。但如果要处理Action 代码,就必 须根据相应的Action 来编写Action 方法。一个Action 方法除了方法名和execute 方法不一样外,其 他的都和execute 方法完全一样。但编写Action 方法时要注意,Action 方法名必须和用于指定动作 的请求参数值一致(大小写也必须一致)。在下面的例子中演示了通过DispatchAction 类实现方法 和Action的对应。 方法名称可自定义,但方法的参数需要和DispatchAction类的execute方法参数一致。 import org.apache.struts.actions.DispatchAction; public class UserAction extends DispatchAction{ public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception{ UserForm userForm=(UserForm)form; String userName=userForm.getUsername(); String password=userForm.getPassword(); if(!"".equals(userName)&&!"".equals(password) &&"alice".equals(userName)&&"123456".equals(password)){ return mapping.findForward("loginSucceed"); }else{ return mapping.findForward("loginFailed"); } } public ActionForward logout(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception{ //TODO ... return mapping.findForward("index"); } } 这里我们实现用户的两个操作用户登录和登出,这里仅作简单的验证,用户名和密码不为空,且默认为 alice 用户登录
2.24配置 Struts文件 我们打开 struts的配置文件 struts-config. xml,,该文件在 WebRoot>WEB-NF目录下。然后 将我们刚刚写的 User form和 UserAction配置起来。 <form-beans> <form-bean type="com fdu. struts form UserForm"name="userForm"/> </form-beans> <global-exceptions/><global-forwards/> <action-mappings> <action path="/userAction" type="com fdu. struts action. UserAction" name="userForm" parameter="action unknown="false" input="/login. jsp" validate="true" scope= "request" attribute="userForm"> <forward name="loginsucceed"path="/login succeed. jsp"/> <forward name="loginFailed"path="/login failed. jsp"/> </action> </action-mappings> < action>标签中的属性含义描述如下: name:表示 Ac tionForm的名称。也就是<form-bean>标签中的name属性的值 path:表示 Struts动作,必须以“/”开头 scope:表示 Action form类的对象实例(在本例中是 UserForm类的对象实例)保存的范 围。这个属性值只能取 request和 session。默认值是 session。如果 scope的值为 request,表示将 UserForm类的对象实例以 User Form作为键值保存到了 request的属性 中。如果 scope的值为 sessi on,表示不将 User Form类的对象实例保存到 reques t的属 性中。但不管 scope的值是 request还是 session. struts都会将 User form类的对象实 例保存到 session的属性中 type:表示 UserAct ion类的全名 aid:表示是否使用 Struts的验证框架。 input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在 Userforr类的 validate方法中返回的 Ac tionerrors对象中含有错误描述信息。 Struts 会自动跳转到 Input属性所指的JSP页面 ·< action>标签中的子标签< forward>定义了可以在动作类(在本例中就是 UserForm类) 中读取的 forward页的URL 2.2.5测试运行 我们重新发布这个项目,启动 Tomcat服务器。 在浏览器中输入地址:htp:/ localhost:8080/ SSHDemo/ ndex s进入 index. jsp页面。 Welcome to alice bank Please Login 9
9 2.2.4 配置 Struts 文件 我们打开 struts 的配置文件 struts-config.xml,该文件在 WebRoot->WEB-INF 目录下。然后 将我们刚刚写的 UserForm 和 UserAction 配置起来。 <form-beans> <form-bean type="com.fdu.struts.form.UserForm" name="userForm"/> </form-beans> <global-exceptions/> <global-forwards/> <action-mappings> <action path="/userAction" type="com.fdu.struts.action.UserAction" name="userForm" parameter="action" unknown="false" input="/login.jsp" validate="true" scope="request" attribute="userForm" > <forward name="loginSucceed" path="/login_succeed.jsp"/> <forward name="loginFailed" path="/login_failed.jsp"/> </action> </action-mappings> <action>标签中的属性含义描述如下: • name:表示 ActionForm 的名称。也就是<form-bean>标签中的 name 属性的值。 • path:表示 Struts 动作,必须以“/”开头。 • scope:表示 ActionForm 类的对象实例(在本例中是 UserForm 类的对象实例)保存的范 围。这个属性值只能取 request 和 session。默认值是 session。如果 scope 的值为 request,表示将 UserForm 类的对象实例以 UserForm 作为键值保存到了 request 的属性 中。如果 scope 的值为 session,表示不将 UserForm 类的对象实例保存到 request 的属 性中。但不管 scope 的值是 request 还是 session。Struts 都会将 UserForm 类的对象实 例保存到 session 的属性中。 • type:表示 UserAction 类的全名。 • valid: 表示是否使用 Struts 的验证框架。 • input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在 UserForm 类的 validate 方法中返回的 ActionErrors 对象中含有错误描述信息。Struts 会自动跳转到 input 属性所指的 JSP 页面。 • <action> 标签中的子标签<forward> 定义了可以在动作类(在本例中就是 UserForm 类) 中读取的 forward 页的 URL。 2.2.5 测试运行 我们重新发布这个项目,启动 Tomcat 服务器。 在浏览器中输入地址:http://localhost:8080/SSHDemo/index.jsp 进入 index.jsp 页面