修改密码的实现
内含JDBC的封装,详细资料请看JDBC工具类的封装
1、updatePw.jsp(一切所有错误皆在此页面显示,只有文本框的内容均合格后才能跳转到Servlet)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="accountManager.jsp"%>
<html>
<head>
<title>Title</title>
<style type="text/css">
span {
color: red;
font-size: 12px;
}
</style>
<script type="text/javascript">
window.onload = function () {
//密码和确认密码一致
//获取password2的span标签
var password2ErrorSpan = document.getElementById("passwordError");
//给确认密码文本框绑定blur事件,失去焦点验证
var password2Elt = document.getElementById("newPassword2");
password2Elt.onblur = function () {
var password1 = document.getElementById("newPassword1").value;
var password2 = document.getElementById("newPassword2").value;
var password2RegExp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/;
if(password2.length == 0){
password2ErrorSpan.innerText = "密码不能为空"
} else if(password2 != password1){
password2ErrorSpan.innerText = "密码和确认密码不一致"
} else if (!password2RegExp.test(password2)){
password2ErrorSpan.innerText = "密码至少由8-16个字符,至少1个大写字母,1个小写字母和1个数字";
}
}
//给确认密码文本框绑定focus事件
password2Elt.onfocus = function () {
password2ErrorSpan.innerText = "";
}
//最终表单中所有项均合法方可提交
//给提交按钮绑定鼠标单击事件
var submitBtnElt = document.getElementById("submitBtn");
submitBtnElt.onclick = function () {
//触发username的blur事件
password2Elt.focus();
password2Elt.blur();
//当所有表单项都合法的时候,提交表单
if (password2ErrorSpan.innerText == ""){
//获取表单对象
var userFormElt = document.getElementById("userForm");
//提交表单
userFormElt.submit();
}
}
}
</script>
</head>
<body>
<form id="userForm" action="/myWeb/user/updatePw" method="post">
新密码:<br><input type="password" name="newPassword1" id="newPassword1">
<span style="color: gray;font-size: 12px">* 至少8-16个字符,至少1个大写字母,1个小写字母和1个数字!</span><br>
确认新密码:<br><input type="password" name="newPassword2" id="newPassword2">
<span id="passwordError"></span><br>
<input type="button" value="保存" id="submitBtn">
<input type="reset" value="重置">
</form>
<br>
<hr>
</body>
</html>
2、UserUpPwServlet(获取在session中存储的用户Id,然后把用户Id和修改的密码传入dao层)
如何获取当前登录的用户Id可以移步另一篇博文个人信息的查看
package com.university.controller;
import com.university.dao.UserDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class UserUpPwServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
UserDao dao = new UserDao();
int result = 0;
String newPassword2 = request.getParameter("newPassword2");
HttpSession session = request.getSession(false);
String userId = String.valueOf(session.getAttribute("userId"));
result = dao.updatePw(newPassword2,userId);
if (result == 1){
session.removeAttribute("userId");
response.sendRedirect(request.getContextPath() + "/login.jsp");
} else {
request.setAttribute("info","密码修改失败");
}
}
}
3、UserDao(收到从Servlet里传入的用户Id和密码,在数据库中进行修改,修改后再把结果返回给Servlet)
package com.university.dao;
import com.university.util.JdbcUtil;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UserDao {
private JdbcUtil util = new JdbcUtil();
//更改密码
public int updatePw(String password,String userId){
String sql = "update users set password=? where userId=?";
int result = 0;
try {
PreparedStatement ps = util.createStatement(sql);
ps.setString(1,password);
ps.setInt(2,Integer.valueOf(userId));
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.close();
}
return result;
}
}
4、web.xml(Servlet配置)
<servlet>
<servlet-name>UserUpPwServlet</servlet-name>
<servlet-class>com.university.controller.UserUpPwServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserUpPwServlet</servlet-name>
<url-pattern>/user/updatePw</url-pattern>
</servlet-mapping>
5、测试
(1)查看原密码
(2)查看密码管理页面
(3)当什么都不填就提交时
(4)密码不一致时
(5)密码不符合格式时
(6)填写正确的密码后保存跳转到登录页面(此时密码为旧密码,需要我们重新输入,这里引用的Cookie,保存了上次登录的账号)
免密登录可以看看登录注册及免密的实现