22.5 用户管理模块
用户管理模块包括两个功能,分别是用户登录功能和修改密码功能。用户登录功能是管理员进入管理系统的入口,只有输入正确的用户名和密码才能够登录成功。修改密码功能能够保证管理员账号的安全。本节将为读者介绍用户登录功能和修改密码功能的内容。
22.5.1 用户登录功能
用户通过login.jsp页面输入用户名和密码。单击【登录】按钮就可以提交用户名和密码。login.jsp文件有个<form>表单中通过post()方法将用户名和密码提交给servlet文件夹下的userLogin.java文件。userLogin.java中调用DB.java类中的DB.java()方法判断用户名和密码是否正确。如果用户名和密码都正确,系统会跳转到LoginOK.html页面。 如果不正确,则跳转到LoginError.html页面。userLoginjava文件是一个Servlet文件,其部分代码如下:
//doGet()方法有两个参数,分别是HttpServletRequest和HttpServletResponse类型的参数 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //抛出异常 request.setCharacterEncoding("gbk"); //设置字符编码为 GBK String sql=null; //定义字符串sql,用于存储SQL语句 String username=null; //定义字符串 usemame String password=null; //定义字符串 password usemame=request.getParameter("username"); //从页面获取 usemame 变量的值 password=request.getParameter("password"); //从页面获取 password 变量的值 //如果用户名和密码都不为空,那么就可以组合SELECT语句,并且执行这个SELECT语句 if(usemame!=null && !usemame.equals("") & &password!=null && !password.equals("")){ //将字符串变量usemame和password生成SELECT语句 sql="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'"; DB db = new DB(); //新建 DB 对象 db.connectMySQL(); //调用connectMySQL()连接 MySQL try{ //使用try...catch语句捕获异常 ResultSet rs=db.query(sql); //调用query()方法执行SELECT语句 if(rs.next()){ //判断结果集rs中是否有记录 //创建一个session,并且将用户名存储在3session中 request.getSession().setAttribute("usemame", usemame); response.sendRedirect("../LoginOK.html"); //页面跳转到LoginOK.html } else{ response.sendRedirect("../LoginError.html"); //如果rs中没有记录就表示登录失败 } db.closeDB(); //调用closeDB()方法关闭数据库对象 }catch(SQLException e){ //捕获异常信息 e.printStackTrace(); //显示异常信息 } } else{ response.sendRedirect("../LoginError.html"); //没有输入用户名和密码时登录失败 } } //因为<form>表单中使用post(),因此必须调用doPost()方法中的程序。 //但是这些程序写在doGet()方法中,所以只能用doPost()方法重载doGet() public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //抛出异常 doGet(request, response); //重载此doGet()方法 }
userLogin.java文件中调用connectMySQL()方法连接MySQL数据库。然后调用query()方法执行SELECT语句,从user表中查询相应的记录。查询结果存在ResultSet对象rs中。如果rs.next()不为空,这说明从表中查询出来的记录、输入的用户名和密码都正确。这样就可以登录成功了。
22.5.2 修改密码
用户登录成功后,可以在modifyPasswd.jsp页面修改用户密码。然后将修改后的密码提交给modifyPasswd.java。modifyPasswd.java 将新密码更新到 user表中。
这里的用户名是登录用户的名称,用户名是不能修改的。页面需要输入旧密码,并且输入两次新密码。如果旧密码不正确或者两次输入的新密码不相同,那么系统会跳转到错误页面。如果输入都正确后,旧密码和新密码被提及到modifyPasswd.java文件中。modifyPasswd.java文件的部分代码如下:
//判断从页面传递过来的新密码是否为空,并且判断两次输入的新密码是否相同 if(newPassword1 !=null && !newPassword1 .equals("")&&newPassword1 .equals(newPassword2)){ sql = "SELECT * FROM user WHERE username="'+username+'" AND password="'+oldPassword+"'"; //生成 SELECT 语句 int i; //定义变量i DB db = new DB(); //新建 DB 对象 db.connectMySQL(); //连接 MySQL 数据库 try{ //使用try...catch语句捕获异常 ResultSet rs=db.query(sql); //执行 SELECT 语句 //如果从user表中査询出数据,说明这个用户已经存在,可以修改这个用户的密码 if(rs.next()){ sql = "UPDATE user SET password="'+newPassword1+'" WHERE username="'+username+'"; //生成 UPDATE 语句 i=db.update(sql); //执行 UPDATE 语句 if(i>0){ //i>0表示有记录被更新 System.out.println("密码修改成功"); } }else{ //如果i=0表示没有记录改变 System.out.println("旧密码错误"); } db.closeDB(); }catch(SQLException e){ e.printStackT race(); } }else{ System.out.println("两次输入的新密码不一致或者新密码为空"); //输出新密码不能通过的信息 } response.sendRedirect("../modifyPasswd.jsp"); //页面跳转到 modifyPasswd_jsp
新密码被提交到modifyPasswd.java文件后,调用update()方法执行UPDATE语句。如果,旧密码正确,而且两次输入的新密码相同,那么将新密码更新到user表中。这样,用户密码就修改成功了。