前文已经完成了登陆模块的页面跳转逻辑,接下来对从数据库中获取用户名,并与从登陆页面获取的用户名密码进行匹配的业务逻辑进行描述。

创建数据库

  打开mysql数据库,新建数据库,此处命名为login数据库,在数据库中创建表login,并且设置username和password字段。数据库的设计表如下:
IT料理
  上图中的id作为主键,使得数据库的表至少符合第二范式的要求,其中username和password字段是login表内独有的字段,因此此表符合第三范式的要求。
  接下来在login表中填入数据,此例的数据如下:
IT料理

连接数据库

  在MyEclipse中连接数据库,此处采用加载JDBC驱动的方法连接数据库。首先下载mysql的驱动,下载地址如下:
mysql驱动下载
  接下来需要导入mysql的jar包到我们的项目中来,在包资源管理器中右键JRE系统库,选择构造路径-配置构建路径选项卡,弹出的Java构建路径选项卡中,通过添加外部JAR(X)按钮加载mysql.jar文件。
  接下来,在项目中新建DBUtil.java文件,用于连接mysql数据库。此处略去连接数据库的原理,DBUtil.java文件的源代码如下,请更改源代码中的数据库名称和连入mysql的用户名密码等信息:

package a;  
import java.sql.*;

public class DBUtil {  
    boolean bInited = false;
    //加载驱动
    public void initJDBC() throws ClassNotFoundException {
    //加载MYSQL JDBC驱动程序
    Class.forName("com.mysql.jdbc.Driver");
    bInited = true;
    System.out.println("Success loading Mysql Driver!");
    }

    public Connection getConnection() throws ClassNotFoundException,
    SQLException{
    if(!bInited){
    initJDBC();
    }
    //连接URL为 jdbc:mysql//服务器地址/数据库名
    //后面的2个参数分别是登陆用户名和密码
    Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/数据库名","用户名","密码");
    return conn;
    }


    public boolean loginSuccess(String userName,String password){
    boolean returnValue = false;
    String sql = "SELECT * FROM login";
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    try{
    conn = getConnection();
    stmt = conn.createStatement();
    rs =  stmt.executeQuery(sql);
    while(rs.next()){
    String userNameInDB = rs.getString("username");
    String passwordInDB = rs.getString("password");
    if(userNameInDB.equals(userName) &&
    passwordInDB.equals(password)){
    returnValue = true;
    break;
    }
    }
    }catch (ClassNotFoundException e) {
    e.printStackTrace();
    }catch (SQLException e) {
    e.printStackTrace();
    }

    return returnValue;

    }
}

  上文中loginSuccess()方法内,用于在数据库中查找用户名和密码与传入参数username、password匹配的情况。一旦找到,则返回true结果。

修改Servlet业务逻辑

  修改loginServlet.java文件的业务逻辑,在其中加入连接数据库的语句。其中,主要的页面跳转逻辑写着了doPost()方法内,修改后的doPost()方法如下:

public void doPost(HttpServletRequest request,HttpServletResponse response)  
    throws ServletException,IOException{
    String userName = request.getParameter("username");//取得用户名
    String password = request.getParameter("password");//取得密码
    DBUtil db = new DBUtil();//构建数据库对象
    boolean canLogin = db.loginSuccess(userName, password);
    if(canLogin){//根据登陆情况,跳转页面
    response.sendRedirect("index.jsp");
    }else{
    response.sendRedirect("login.jsp");
    }
    }

测试页面

  调试后的页面效果如下:
IT料理
IT料理