第四个版本我们通过访问数据库来校验用户名和密码!
我们使用的数据库MySQL,所以我们要用到MySQL的驱动:mysql-connector-java-5.1.17-bin.jar
创建表的脚本
-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS user; CREATE TABLE user ( username varchar(256) NOT NULL, password varchar(256) DEFAULT NULL, PRIMARY KEY (username) ) ENGINE=MyISAM DEFAULT CHARSET=UTF-8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO user VALUES ('admin', 'admin'); INSERT INTO user VALUES ('user', 'user');
同时需要JDBC来访问数据库
首先创建一个JDBC工具类,用来建立和关闭连接
JdbcUtil.java
package com.coderdream.ad.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcUtil { public static void close(Statement st, Connection con) { try { st.close(); } catch (Exception e) { } try { con.close(); } catch (Exception e) { } } public static void close(ResultSet rs, Statement st, Connection con) { try { rs.close(); } catch (Exception e) { } close(st, con); } public static Connection getConnection() throws Exception { Class.forName(SqlConstant.DB_NAME); return DriverManager.getConnection(SqlConstant.DB_URL, SqlConstant.DB_USER_NAME, SqlConstant.DB_PASSWORD); } }
再创建一个常量类,用于保存数据库的连接属性
SqlConstan.java
package com.hp.gddc.ad.db; public class SqlConstant { public static final String DB_NAME = "com.mysql.jdbc.Driver"; public static final String DB_URL = "jdbc:mysql://localhost:3306/stu"; public static final String DB_USER_NAME = "root"; public static final String DB_PASSWORD = "1234"; }
最后就可以通过UserDao来访问数据库了:
UserDao.java
package com.coderdream.db; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class UserDao { public int queryUser(String username, String password) { Connection con = null; Statement st = null; ResultSet rs = null; int i = 0; try { con = JdbcUtil.getConnection(); st = con.createStatement(); String sql = "select * from user where username='" + username + "' and password='" + password + "'"; System.out.println(sql); rs = st.executeQuery(sql); while (rs.next()) { i++; System.out.print("username=" + rs.getString("username")); System.out.print(",password=" + rs.getString("password")); System.out.println(""); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { JdbcUtil.close(rs, st, con); } return i; } }
同时更新LoginAction中的相关代码,把硬编码比较改成访问数据库:
LoginAction.java
package com.coderdream.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.hp.gddc.ad.db.UserDao; import com.hp.gddc.ad.form.LoginForm; public class LoginAction extends Action { /** * 处理客户端请求 */ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // 得到客户的的提交数据 LoginForm lf = (LoginForm) form; UserDao studentDao = new UserDao(); String username = lf.getUserName(); String password = lf.getPassword(); int result = studentDao.queryUser(username, password); // 业务调用 if (1 <= result) { // 用户名密码验证成功,跳转到成功页面 return mapping.findForward("success"); } else { // 用户名密码错误,跳转到失败页面 return mapping.findForward("failing"); } } }
运行结果和第三个版本一致!
源代码: