用户经常更改自各儿的计程仪口令,现在使用Struts和Hibernate实现。 此过程比上一节的斯坦共和国稍微复杂一些,因为需要修改数据库等操作。 此实例可以加强所学习的Struts、Hibernate、配置等知识。
4.3.1总体设计
添加根据以前的斯坦共和国继续开发,修改密码的功能。 修改密码的逻辑主要发生在新建的Action类中。 后端可以继承第一个斯坦共和国的数据库表和Hibernate映射,而无需添加新字段。 前道工序情况下,如果用户需要更改计程仪口令,请在新创建的Action类中进行身份验证和处理,确认数据库中是否有该用户,验证旧口令和新口令,如果没有问题,请修改数据库,然后重新输入新口令
图4-43图4-44
4.3.2具体实现
(1)要添加用于处理密码修改逻辑的Action类——ChangePasswordAction,请确定需要修改的用户是否为合法用户,确定是否输入了正确的旧密码,并且输入两次的新密码相匹配如果这些个身份验证成功,请调用Hibernate方法来修改数据库并修改用户口令。
有关ChangePasswordAction.java的完整查询密码,请参见以下查询密码列表: 在此,对其主要内容进行简单说明。
下述查询密码表示通过ActionForm接收来自用户的输入数据。
登录信息形式=(登录信息形式)形式;
字符串用户名=loginform.getusername ();
字符串密码=loginform.get密码();
字符串密码=loginform.get新密码();
stringconfirmpassword=loginform.getconfirmpassword ();
下述查询密码表示,如果用户输入的密码不一致,则定径套ActionForm内的错误信息,进行页面跳转。 现在,ActionForm不仅可以将页面中的数据传递到Action类,还可以存储Action的状态并在页面上进行网站数据库定。 因此,ActionForm用于在Action和页面之间保留和传输数据。
国际货币基金组织新密码. equals (确认密码) {。
loginform.set错误消息(' yourpasswordentrisdidnotmatch!' );
返回映射. find前方(' change _ failure ' );
是
下面的查询密码表示从进行Hibernate查询得到的List中取出User,设定其新口令,用session.save ()使对象永久化。 这种方式体现了Hibernate带来的便利性。
用户=(用户)用户列表. get (0);
用户密码(新密码);
session.save (用户); 使用session.save ()方法将数据插入数据库
(2)接下来在LoginForm中追加2个领域,如下所示。
隐私字符串新密码;
私有字符串配置密码;
然后添加public void resetManually ()方法。 此方法用于清空ActionForm中的数据。 否则,上次输入的数据将保留在不同的request中。
公共语音重置手册()
{。
用户名=空;
密码=空;
新密码=空;
确认密码=空;
错误消息=空;
是
如果需要,可以在Action类中调用此方法。
(修改Struts-config.xml文件。 即使下次添加一个,该操作也使用LoginForm。
(添加三个jsp页面:更改路径. jsp、更改路径. jsp和更改故障. jsp。 change_password页的form部分查询密码如下所示。
用户名:
旧密码:
新密码:
确认新密码:
在此使用标签条受理用户的密码输入。
(5)完整的文件查询密码列表如下所示。
ChangePasswordAction.java查询密码如下所示。
importorg.Apache.struts.action.*;
导入javax .服务器. http.*;
导入Java.io.io执行;
导入javax.servlet.servlet exception;
导入Java.util.ArrayList;
import org.hibernate.*;
import org.hibernate.cfg.*;
/**
* @ author朝五郎
*
* description 3360 thisclassisastrutsactionclassusedtodothevalidation
*工作和变更密码。
*
*
*版权所有:
*
///
publicclasschangepasswordactionextendsaction {。
/**
* thismethoddealswiththeactionsneedtochangethepassword
* @参数映射
* @参数表单
* @参数req
* @参数列表
* @return
///
发布前向执行(动作对映、动作表单),以及
http服务请求报告、http服务响应报告。
超执行、伺服器执行{。
登录信息形式=(登录信息形式)形式;
//获取用户输入的用户名、密码、新密码和新密码的确认
字符串用户名=loginform.getusername ();
字符串密码=loginform.get密码();
字符串密码=loginform.get新密码();
stringconfirmpassword=loginform.getconfirmpassword ();
//判断新密码和新密码是否一致
if (新密码!=空值确认密码!=空值) {。
//Not the same
国际货币基金组织新密码. equals (确认密码) {。
loginform.set错误消息(' yourpasswordentrisdid ' )
不匹配! ' );
返回映射. find前方(' change _ failure ' );
是
} else {。
//如果不一致,则返回错误消息,要求用户重新输入
loginform.set错误消息(' pleaseenterthenewpassword ' )
推特! ' );
返回映射. find前方(' change _ failure ' );
是
//新密码通过后,判断是否有该用户,以及该密码是否正确
if (用户名!=空值) {。
//以太网智能运输系统a valid用户
特里。
sessionfactorysf=新配置().configure ()。
buildSessionFactory ();
Session session=sf.openSession ();
transaction tx=session.begin transaction ();
//在数据库中搜索此用户
字符串SQL查询=' selectufromuseruwhereu
用户名='用户名' ' ';
查询=session.create查询(SQL查询);
ArrayList用户列表=(ArrayList ) lquery.list ();
用户=新用户();
//此用户存在
空的!=用户列表(用户列表. size ()0) ) {。
用户=(用户)用户列表. get (0);
国际货币基金组织user.get密码().equals (密码) ) {。
loginform.set错误消息('无效)
交互式密码用户! ' );
返回映射. find前锋('变更?
故障' );
} else {。
//如果此用户存在且密码正确,请将密码更改为新密码
if (新密码!=空值) {。
用户密码(新密码);
//将新密码保存到数据库
session.save (用户);
} else {。
loginform.set错误消息(' please
进入old密码! ' );
返回映射. find前锋('变更?
故障' );
是
是
} else {。
//此用户不存在
loginform.set错误消息(' invaliduseror
不相干密码! ' );
返回映射. find前方(' change _ failure ' );
是
mit ();
session.close ();
{\catch (高级执行)。
e .打印堆栈跟踪();
loginform.set错误消息('错误!' );
返回映射. find前方(' change _ failure ' );
是
} else {。
loginform.set错误消息(' pleaseentertheusername!' );
返回映射. find前方(' change _ failure ' );
是
//密码更改已成功完成
返回映射. find前方(' change _ success ' );
是
是
LoginAction.java如下所示。
importorg.Apache.struts.action.*;
导入javax .服务器. http.*;
导入Java.io.io执行;
导入javax.servlet.servlet exception;
导入Java.util.arrayl