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