修改密码的实现

修改密码的实现

内含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,保存了上次登录的账号)

免密登录可以看看登录注册及免密的实现
在这里插入图片描述

(7)登陆后再看密码信息时则已经修改成功

在这里插入图片描述

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值