您的位置:首页 > 其它

网上图书商城项目学习笔记-008修改密码功能

2016-01-26 11:36 501 查看
一、修改密码流程分析



二、代码

1.view层

1)pwd.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>pwd.jsp</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link rel="stylesheet" type="text/css" href="<c:url value='/css/css.css'/>">
<link rel="stylesheet" type="text/css" href="<c:url value='/jsps/css/user/pwd.css'/>">
<script type="text/javascript" src="<c:url value='/jquery/jquery-1.5.1.js'/>"></script>
<script src="<c:url value='/js/common.js'/>"></script>
<script src="<c:url value='/jsps/js/user/pwd.js'/>"></script>
</head>

<body>
<div class="div0">
<span>修改密码</span>
</div>

<div class="div1">
<form action="<c:url value='/UserServlet'/>" method="post" target="_top" id="updatePasswordForm">
<input type="hidden" name="method" value="updatePassword"/>
<table>
<tr>
<td><label class="error">${msg }</label></td>
<td colspan="2"> </td>
</tr>
<tr>
<td align="right">原密码:</td>
<td><input class="input" type="password" name="loginpass" id="loginpass" value=""/></td>
<td><label id="loginpassError" class="error"></label></td>
</tr>
<tr>
<td align="right">新密码:</td>
<td><input class="input" type="password" name="newpass" id="newpass" value=""/></td>
<td><label id="newpassError" class="error"></label></td>
</tr>
<tr>
<td align="right">确认密码:</td>
<td><input class="input" type="password" name="reloginpass" id="reloginpass" value=""/></td>
<td><label id="reloginpassError" class="error"></label></td>
</tr>
<tr>
<td align="right"></td>
<td>
<img id="vCode" src="<c:url value='/VerifyCodeServlet'/>" border="1"/>
<a href="javascript:_change();">看不清,换一张</a>
</td>
</tr>
<tr>
<td align="right">验证码:</td>
<td>
<input class="input" type="text" name="verifyCode" id="verifyCode" value=""/>
</td>
<td><label id="verifyCodeError" class="error"></label></td>
</tr>
<tr>
<td align="right"></td>
<td><input id="submit" type="submit" value="修改密码"/></td>
</tr>
</table>
</form>
</div>
</body>
</html>


2)pwd.js

$(function() {
/*
* 1. 给注册按钮添加submit()事件,完成表单校验
*/
$("#updatePasswordForm").submit(function(){
$("#msg").text("");
var bool = true;
$(".input").each(function() {
var inputName = $(this).attr("name");
if(!invokeValidateFunction(inputName)) {
bool = false;
}
});
return true;
});

/*
* 3. 输入框推动焦点时进行校验
*/
$(".input").blur(function() {
var inputName = $(this).attr("name");
invokeValidateFunction(inputName);
});
});

/*
* 输入input名称,调用对应的validate方法。
* 例如input名称为:loginname,那么调用validateLoginname()方法。
*/
function invokeValidateFunction(inputName) {
inputName = inputName.substring(0, 1).toUpperCase() + inputName.substring(1);
var functionName = "validate" + inputName;
return eval(functionName + "()");
}

/*
* 校验密码
*/
function validateLoginpass() {
var bool = true;
$("#loginpassError").css("display", "none");
var value = $("#loginpass").val();
if(!value) {// 非空校验
$("#loginpassError").css("display", "");
$("#loginpassError").text("密码不能为空!");
bool = false;
} else if(value.length < 3 || value.length > 20) {//长度校验
$("#loginpassError").css("display", "");
$("#loginpassError").text("密码长度必须在3 ~ 20之间!");
bool = false;
} else {// 验证原错误是否正确
$.ajax({
cache: false,
async: false,
type: "POST",
dataType: "json",
data: {method: "validateLoginpass", loginpass: value},
url: "/goods/UserServlet",
success: function(flag) {
if(!flag) {
$("#loginpassError").css("display", "");
$("#loginpassError").text("原密码错误!");
bool = false;
}
}
});
}
return bool;
}

// 校验新密码
function validateNewpass() {
var bool = true;
$("#newpassError").css("display", "none");
var value = $("#newpass").val();
if(!value) {// 非空校验
$("#newpassError").css("display", "");
$("#newpassError").text("新密码不能为空!");
bool = false;
} else if(value.length < 3 || value.length > 20) {//长度校验
$("#newpassError").css("display", "");
$("#newpassError").text("新密码长度必须在3 ~ 20之间!");
bool = false;
}
return bool;
}

/*
* 校验确认密码
*/
function validateReloginpass() {
var bool = true;
$("#reloginpassError").css("display", "none");
var value = $("#reloginpass").val();
if(!value) {// 非空校验
$("#reloginpassError").css("display", "");
$("#reloginpassError").text("确认密码不能为空!");
bool = false;
} else if(value != $("#newpass").val()) {//两次输入是否一致
$("#reloginpassError").css("display", "");
$("#reloginpassError").text("两次密码输入不一致!");
bool = false;
}
return bool;
}

/*
* 校验验证码
*/
function validateVerifyCode() {
var bool = true;
$("#verifyCodeError").css("display", "none");
var value = $("#verifyCode").val();
if(!value) {//非空校验
$("#verifyCodeError").css("display", "");
$("#verifyCodeError").text("验证码不能为空!");
bool = false;
} else if(value.length != 4) {//长度不为4就是错误的
$("#verifyCodeError").css("display", "");
$("#verifyCodeError").text("错误的验证码!");
bool = false;
} else {//验证码是否正确
$.ajax({
cache: false,
async: false,
type: "POST",
dataType: "json",
data: {method: "validateVerifyCode", verifyCode: value},
url: "/goods/UserServlet",
success: function(flag) {
if(!flag) {
$("#verifyCodeError").css("display", "");
$("#verifyCodeError").text("错误的验证码!");
bool = false;
}
}
});
}
return bool;
}


2.servlet层

1)UserServlet.java

public String updatePassword(HttpServletRequest request, HttpServletResponse response) {
/*
* 1. 封装表单数据到user中
* 2. 从session中获取uid
* 3. 使用uid和表单中的oldPass和newPass来调用service方法
*   > 如果出现异常,保存异常信息到request中,转发到pwd.jsp
* 4. 保存成功信息到rquest中
* 5. 转发到msg.jsp
*/
User formUser = CommonUtils.toBean(request.getParameterMap(), User.class);
User user = (User) request.getSession().getAttribute("sessionUser");
if(user == null) {
request.setAttribute("msg", "您还没有登录!");
return "f:/jsps/user/login.jsp";
}

try {
userService.updatePassword(user.getUid(), formUser.getNewpass(), formUser.getLoginpass());
request.setAttribute("msg", "修改密码成功");
request.setAttribute("code", "success");
return "f:/jsps/msg.jsp";
} catch (UserException e) {
request.setAttribute("msg", e.getMessage());
request.setAttribute("user", formUser);
return "f:/jsps/user/pwd.jsp";
}
}


3.service层

1)UserService.java

/**
* 修改密码
* @param uid
* @param newPass
* @param oldPass
* @throws UserException
*/
public void updatePassword(String uid, String newPass, String oldPass) throws UserException {
try {
boolean bool = userDao.findByUidAndPassword(uid, oldPass);
if(!bool) {//如果老密码错误
throw new UserException("老密码错误");
}
userDao.updatePassword(uid, newPass);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}


4.dao层

1)UserDao.java

/**
* 按uid和password查询
* @param uid
* @param password
* @return
* @throws SQLException
*/
public boolean findByUidAndPassword(String uid, String password) throws SQLException {
String sql = "select count(1) from t_user where uid=? and loginpass=?";
Number count = (Number) qr.query(sql, new ScalarHandler(), uid, password);
return count.intValue() > 0;
}

/**
* 修改密码
* @param uid
* @param password
* @throws SQLException
*/
public void updatePassword(String uid, String password) throws SQLException {
String sql = "update t_user set loginpass=? where uid=?";
qr.update(sql, password, uid);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: