smbms系统项目的密码修改模块

smbms系统项目的密码修改

1.写项目的步骤

前言:写一个项目,被建议要从底层往上写,同时,思考其功能和架构。

一个架构的基本框架是这样的:

客户--->视图层(前端页面)---->控制层(servlet)---->业务层(service)------>业务处理(dao层)---->数据库

  • 视图层:展示数据,提供用户操作
  • 控制层:接受请求,交给业务层,视图跳转
  • 业务层(service)处理业务,获取数据和指令请求,具体的操作交给dao层,判断业务逻辑
  • 业务层(dao)专门用来操作数据库。

2.修改密码的步骤

思考:修改密码dao层要在数据库干什么?

(1)调用数据库的数据,通过jdbc,连接数据库,修改密码数据,并并将返回的结果传递给service。

(2)daoc层要给对外提供一个接口,供service业务层调用。

那么,dao层就写两个类,一个接口类供调用,一个实现类,实现底层操作数据的实现方法类。

  • 接口方法
//修改当前用户的密码
public int updata(Connection connection, int id, int password) throws SQLExceptionException, Exception;
  • 实现方法
public class UserdaoImpl implements Userdao{

    @Override
    //修改当前用户的密码
    public int updata(Connection connection, int id, int password) throws Exception {

        //需要一个执行预编译sql语句的对象,调用basedao中的方法
        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,pstm,sql,params);//最后一个接受获取的参数
            //关闭资源
            BaseDao.closeResource(null,pstm,null);
        }
        return execute;
    }
}

(3)直接操作数据库的dao层完结之后,就到了service业务层,他的作用也是和dao相同.

同样,它也需要两个类提供实现和对外接口

  • 接口类,实现修改密码操作

        public boolean updataPwd(int id, int pwd);
    
  • 实现类,实现接口中的方法。

    public class userServiceImpl implements userService{
        public Boolean updataPwd(){
            Connection connection=null;
            
            Boolean flag=false;
            try{
                connection = BaseDao.getConnection();
                if (UserDao.updataPwd(connection, id, pwd) > 0) {
                    flag=true;
                }
            }catch(SQLException e){
                e.printStackTrace();
            }finally{
                BaseDao.closeResource(connection,null,null);  
            }
            return flag;
        }
    }
    

(4)控制层servlet:

通过session获取用户的信息,然后通过service提供的方法修改密码。

public class userServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //复用,提取出方法
        String method=req.getParameter("method");
        if(method.equals("savepwd")&&method!=null){
            this.update(req,resp);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    public void update(HttpServletRequest req, HttpServletResponse resp){
        //从session中获取id
        Object o=req.getSession().getAttribute(Constants.USER_SESSION);
        //获取用户输入的密码
        String newPassword=req.getParameter("newPassword");
        boolean flag=false;
        //判断密码是否为空,如果不为空,向上一级传递
        if(o!=null&& !StringUtils.isNullOrEmpty(newPassword)){
            userService userService=new userServiceImpl();
            flag=userService.updata(((User)o).getId(),newPassword);
            if(flag){
                req.setAttribute("message","修改密码成功,使用新密码登录");
                //密码修改成功,移除当前session
                req.getSession().removeAttribute(Constants.USER_SESSION);

            }else{
                req.setAttribute("message","修改密码失败");
            }
        }else{
            req.setAttribute("message","修改密码有问题");
        }
        try {
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

web注册

  <servlet>
    <servlet-name>userServlet</servlet-name>
    <servlet-class>servlet.userServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>userServlet</servlet-name>
    <url-pattern>userServlet</url-pattern>
  </servlet-mapping>

总结:

这是我的第一个学习的项目的模块,感觉麻烦的很,对于总体的部分还能理解,原理也差不多,但是,让我扣这么细去实现,我做不出来,这是肯定的,感觉很绕,然后,有的代码也没理解,像复用这我就没懂,懒得想了。

呃呃,麻烦呀,代码好多。

上一篇:SMBMS项目-准备工作


下一篇:Mybatis注解