smbms密码修改与实现

1.之前的前端素材导入jsp(之前导jsp时早已导入)

2.写项目,建议从底层往上写

3.UserDao接口

//修改当前用户密码
    public int updatePwd(Connection connection,int id,int password) throws SQLException;

4.UserDao接口实现类

修改当前用户密码
    public int updatePwd(Connection connection, int id, int password) throws SQLException {

        PreparedStatement pstm = null;
        int execute = 0;
        if (connection!=null){
            String sql = "update smbms_user set userPassword = ? where id = ?";
            Object params[] = {password,id};
            execute = BaseDao.execute(connection, sql, params, pstm);
            BaseDao.closeResource(null, null, pstm);
        }
        return execute;
    }

5.UserService层接口

 

package com.Li.service;

import com.Li.pojo.User;

import java.sql.Connection;
import java.sql.SQLException;

//业务层
//对dao层进行操作。dao层已经将数据库的内容拿到。
//功能:用户登录
//真正的登录不能像dao层,靠一个用户名登录。你得要用户名密码同时正确才可以登录!!!
public interface UserService {
    //用户登录
    public User login(String userCode,String password);

    //根据用户ID修改密码
    public boolean updatePwd(int id, int pwd);
}

6.UserService层实现类

 

package com.Li.service;

import com.Li.dao.BaseDao;
import com.Li.dao.user.UserDao;
import com.Li.dao.user.UserDaoImp1;
import com.Li.pojo.User;
import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;

public class UserServiceImp1 implements UserService{

    //业务层都会调用dao层,所以我们要引入dao层
    private UserDao userDao;
    public UserServiceImp1(){
        userDao = new UserDaoImp1();
    }


    public User login(String userCode, String password) {
        Connection connection = null;
        User user = null;

        try {
            connection = BaseDao.getConnection();
            //通过业务层调用对应的具体数据库操作
            user = userDao.getLoginUser(connection, userCode);//注意,要把这个返回给user。否则会报空指针异常
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            BaseDao.closeResource(connection, null, null);
        }
        return user;
    }

    public boolean updatePwd(int id, int pwd) {
        Connection connection = null;
        boolean flag = false;//标志位判断密码是否修改成功
        //修改密码
        try {
            connection = BaseDao.getConnection();
            if (userDao.updatePwd(connection, id, pwd)>0) {//sql执行成功
                flag = true;//修改密码成功。返回一个true
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            BaseDao.closeResource(connection, null, null);
        }
        return flag;
    }

    @Test
    public void test(){
        UserServiceImp1 userService = new UserServiceImp1();
        User admin = userService.login("admin", "1234567858578");//password是个假的。是从admin用户数据库里面提出的密码
        System.out.println(admin.getUserPassword());
    }
}

7.UserServlet(初版)

 

package com.Li.servlet.user;

import com.Li.pojo.User;
import com.Li.service.UserServiceImp1;
import com.Li.util.Constants;
import com.mysql.cj.util.StringUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//实现servlet复用
//实现把前端的内容返回给后端。
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从session中拿ID
        Object o = req.getSession().getAttribute(Constants.USER_SESSION);

        String newpassword = req.getParameter("newpassword");

        boolean flag = false;

        if (o!=null && !StringUtils.isNullOrEmpty(newpassword)){
            UserServiceImp1 userService = new UserServiceImp1();
            flag = userService.updatePwd(((User) o).getId(), newpassword);//将o转为User并且获取代码

            //如果27句成功。
            if (flag){
                req.setAttribute("message", "修改密码成功,请退出,使用新密码登录");
                //密码修改成功。移除当前Session.之后由于过滤器,没有session之后就会跳转到错误页面
                req.getSession().removeAttribute(Constants.USER_SESSION);
            }else {
                req.setAttribute("message", "密码修改失败。");
                //密码修改失败。
            }
        }else {
            req.setAttribute("message", "新密码有问题。");
        }

        req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

web.xml

    <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.Li.servlet.user.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UserServlet</servlet-name>
        <url-pattern>/jsp/user.do</url-pattern>
    </servlet-mapping>

 8.实现复用记得提取出方法(修改后的UserServlet)

package com.Li.servlet.user;

import com.Li.pojo.User;
import com.Li.service.UserServiceImp1;
import com.Li.util.Constants;
import com.mysql.cj.util.StringUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//实现servlet复用
//实现把前端的内容返回给后端。
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getParameter("method");
        if (method!=null && method.equals("savepwd")){
            this.updatePwd(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

//封装updatePwd
    public void updatePwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从session中拿ID
        Object o = req.getSession().getAttribute(Constants.USER_SESSION);

        String newpassword = req.getParameter("newpassword");

        boolean flag = false;

        if (o!=null && newpassword!=null){
            UserServiceImp1 userService = new UserServiceImp1();
            flag = userService.updatePwd(((User) o).getId(), newpassword);//将o转为User并且获取代码

            //如果27句成功。
            if (flag){
                req.setAttribute("message", "修改密码成功,请退出,使用新密码登录");
                //密码修改成功。移除当前Session.之后由于过滤器,没有session之后就会跳转到错误页面
                req.getSession().removeAttribute(Constants.USER_SESSION);
            }else {
                req.setAttribute("message", "密码修改失败。");
                //密码修改失败。
            }
        }else {
            req.setAttribute("message", "新密码有问题。");
        }

        req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);
    }

}

分析问题(排错思路):狂神整了很长时间,不得不佩服排错速度很快,以下是我个人浅薄的看法:

        每一层都有每一层的职责,当出现问题的时候,可以在每一层都sout一下,看是否输出正确(能否输出)。

        如果有断层的情况,那就是断层的上一层有问题。直接找上一层的问题。

        上一层是在if语句成功才进入下一层,所以可能if语句有问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值