实例二:用户密码修改

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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文件。在下增加一个,此Action仍然使用LoginForm。

(4)增加3个JSP页面:change_password.jsp、change_success.jsp和chan ge_failure.jsp。下面是change_password页面中的form部分代码。

用户名:
旧密码:
新密码:
新密码确认: