实例二:用户密码修改
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用户往往要更改自己的登录密码,现在就用Struts和Hibernate来实现它。由于这个过程需要对数据库进行修改等操作,所以要比前一节实例稍复杂些。通过这个实例可以巩固所学的Struts、Hibernate以及配置等知识。
4.3.1 总体设计
在前一个实例的基础上继续开发,加上修改密码的功能。加上修改密码的逻辑,主要是在新建立的Action类里面完成。在后端,可以沿用第一个实例中的数据库表和Hibernate映射,而不需要增加新的字段。在前端,当用户需要改变登录密码时,用新建立的Action类进行验证和处理,看数据库中是否有这个用户,并验证旧的和新的密码,如果一切没有问题,则修改数据库,使新密码生效,否则显示错误信息,如图4-43和图4-44所示。
图4-43 图4-44
4.3.2 具体实现
(1)要增加一个处理密码修改逻辑的Action类——ChangePasswordAction,其主要工作是:判断需要修改的用户是否是合法用户,然后判断是否输入了正确的旧密码,两次输入的新密码是否一致。若通过了这些验证,就调用Hibernate
方法来修改数据库,修改用户的密码。
ChangePasswordAction.java的完整代码见后面的代码列表,这里简单介绍其中的主要内容。
① 下述代码表示通过ActionForm接受用户的输入数据。
LoginForm loginForm = (LoginForm) form;
String username = loginForm.getUsername();
String password = loginForm.getPassword();
String newPassword = loginForm.getNewPassword();
String confirmPassword = loginForm.getConfirmPassword();
② 下述代码表示如果用户两次输入的密码不一致,设置ActionForm里面的错误信息,并做页面跳转。在这里可以看到,ActionForm不仅仅从页面传递数据到A ction类,而且也能保存Action的状态,并能在页面上访问。所以直白地说,A ctionForm就是用来在Action和页面之间保持和传递数据的。
if (!newPassword.equals(confirmPassword)) {
loginForm.setErrorMessage("Your password entris did not match!");
return mapping.findForward("change_failure");
}
③ 下述代码表示将User从进行Hibernate查询得到的List中取出来,并设置其新密码,然后用session.save()将对象持久化。这种方式体现了Hibernate 带来的方便性。
user = (User) userList.get(0);
user.setPassword(newPassword);
session.save(user); //使用session.save()方法在数据库中插入数据
(2)其次在LoginForm中增加两个字段,如下所示。
private String newPassword;
private String confirmPassword;
然后增加public void resetManually()方法。该方法用来清空ActionForm中的数据,否则会在不同的request中遗留上次输入的数据。
public void resetManually()
{
username = null;
password = null;
newPassword = null;
confirmPassword = null;
errorMessage = null;
}
必要的时候在Action类中调用此方法。
(3)修改Struts-config.xml文件。在
(4)增加3个JSP页面:change_password.jsp、change_success.jsp和chan ge_failure.jsp。下面是change_password页面中的form部分代码。
用户名: | |
旧密码: | |
新密码: | |
新密码确认: |