目录
1、完成登录功能。
2、完成注册功能。
3、完成注册的同时不能注册相同的用户名。
首先我们需要创建一个web项目工程,然后在web包下的WEB-INF下创建一个lib包,里面放入mysql连接jar包,这里提供了mysql5版本和mysql8版本的jar包,对应的就是mysql的版本,如果是mysql5系列版本的就用5.16的jar包,如果是mysql8系列的版本就用8.0.16版本jar包。
链接:https://pan.baidu.com/s/1loxaN41BXlfdePT_8DDBDw
提取码:388i
如下图配置
注意:放入后一定要记得导入,右击jar包点击ADD Library进行导入。

新建jdbc.properties文件到src目录中,添加以下内容
- jdbc.className=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/test5
- jdbc.username=root
- jdbc.password=xxx
因为开发需要使用MVC三层架构,需要创建相对应的包,如图所示

三层为dao层、service层、web层,bean层用来存放实体类即JavaBean,util是工具类存放的包。
把下面代码放到util包的JDBCUtil类中
- public class JDBCUtil {
- public JDBCUtil() {
- }
-
- private static String className;
- private static String url;
- private static String username;
- private static String password;
- private static Connection conn = null;
-
- static {
- Properties pro = null;
- InputStream is = null;
- try {
- is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
- pro = new Properties();
- pro.load(is);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- is.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- className = pro.getProperty("jdbc.className");
- url = pro.getProperty("jdbc.url");
- username = pro.getProperty("jdbc.username");
- password = pro.getProperty("jdbc.password");
- //加载驱动
- try {
- Class.forName(className);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- //获取连接
- try {
- conn = DriverManager.getConnection(url, username, password);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- public static Connection getConnection() {
- return conn;
- }
-
- public static void close(ResultSet rs, Statement stmt, Connection conn) {
- try {
- if (rs != null) {
- rs.close();
- rs = null;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- try {
- if (stmt != null) {
- stmt.close();
- stmt = null;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- try {
- if (conn != null) {
- conn.close();
- conn = null;
- }
-
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- public static void close(Statement stmt, Connection conn) {
- try {
- if (stmt != null) {
- stmt.close();
- stmt = null;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- try {
- if (conn != null) {
- conn.close();
- conn = null;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
创建表t_user
- CREATE TABLE `t_user` (
- `username` varchar(20) NOT NULL,
- `password` varchar(20) NOT NULL,
- PRIMARY KEY (`username`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据请自行添加
为了模拟前端发送数据,我这里用scanner对进行获取数据,实际开发中web层是用servlet技术来获取前端数据的。
- public class UserWeb {
- public static void main(String[] args) {
- //创建service对象
- UserService userService=new UserServiceImpl();
- System.out.println("请选择选项");
- System.out.println("1-----登录");
- System.out.println("2-----注册");
- Scanner sc =new Scanner(System.in);
- int i = sc.nextInt();
- switch (i){
- case 1:
- System.out.println("请输入账号");
- Scanner sc1=new Scanner(System.in);
- String username = sc1.nextLine();
- System.out.println("请输入密码");
- Scanner sc2=new Scanner(System.in);
- String password = sc2.nextLine();
- //创建user对象 把用户输入的账号密码封装对象
- User user=new User();
- user.setUsername(username);
- user.setPassword(password);
- boolean flag1 = userService.login(user);
-
- if(flag1==true){
- System.out.println("登录成功");
- }else {
- System.out.println("登录失败");
- }
- break;
- case 2:
- System.out.println("请输入注册账号");
- Scanner register1=new Scanner(System.in);
- String s1 = register1.nextLine();
- System.out.println("请输入注册密码");
- Scanner register2=new Scanner(System.in);
- String s2 = register2.nextLine();
- User user1=new User();
- user1.setUsername(s1);
- user1.setPassword(s2);
- boolean register = userService.register(user1);
- if(register){
- System.out.println("注册成功");
- }else{
- System.out.println("注册失败,用户已存在");
- }
- break;
- default:
- System.out.println("你输入的有误");
- }
- }
-
- }
service层和dao层一样,也是一个接口和一个实现类

UserService接口
- public interface UserService {
- //登录功能
- public boolean login(User user);
- //注册功能
- public boolean register(User user);
- }
UserServiceImpl实现类
- public class UserServiceImpl implements UserService {
- //登录功能
- @Override
- public boolean login(User user) {
- //创建userDao对象
- UserDao userDao=new UserDaoImpl();
- //调用login方法把参数user传递过去,得到一个返回值为user_data
- User user_data = userDao.login(user);
- //判断user_data是否为空
- if(user_data!=null){
- //不为空 证明查询出了用户 登录成功
- return true;
- }
- //否则登录失败
- return false;
- }
-
- //注册功能
- @Override
- public boolean register(User user) {
- UserDao userDao=new UserDaoImpl();
- //调用userDao中的queryByName方法里面传递一个用户名 得到返回值user1
- User user1 = userDao.queryByName(user.getUsername());
- //判断user1是否为空
- if(user1!=null){
- //不为空 证明用户存在 不能注册
- return false;
- }else{
- //为空 则可以注册 调用注册方法
- Boolean register = userDao.register(user);
- //判断返回值是否注册成功
- if(register){
- //成功则返回true
- return true;
- }else{
- //否则返回false
- return false;
- }
- }
- }
- }
创建UserDao接口
- public interface UserDao {
- //登录方法
- public User login(User user);
- //注册方法
- public Boolean register(User user);
- //查询用户方法
- public User queryByName(String username);
- }
在dao层创建一个impl包,用来存放接口的实现类

实现类代码
- public class UserDaoImpl implements UserDao {
- //登录功能
- @Override
- public User login(User user) {
- //调用工具类获取连接对象
- Connection conn = JDBCUtil.getConnection();
- //初始化对象
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- try {
- // Statement stmt = conn.createStatement();
- // String sql="select * from t_user where username='"+user.getUsername()+"' and password='"+user.getPassword()+"'";
- // ResultSet rs = stmt.executeQuery(sql);
- //解决sql注入问题
- String sql = "select * from t_user where username= ? and password = ?";
- //把sql语句传递给pstmt对象
- pstmt = conn.prepareStatement(sql);
- //给占位符赋值
- pstmt.setString(1, user.getUsername());
- pstmt.setString(2, user.getPassword());
- //调用查询方法
- rs = pstmt.executeQuery();
- //对结果进行遍历
- while (rs.next()) {
- String username = rs.getString("username");
- String password = rs.getString("password");
- User user1 = new User();
- user1.setUsername(username);
- user1.setPassword(password);
- //返回结果
- return user1;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- //释放资源
- JDBCUtil.close(rs, pstmt, conn);
- }
- return null;
- }
-
- //注册功能
- @Override
- public Boolean register(User user) {
- Connection conn = JDBCUtil.getConnection();
- // Statement stmt = null;
- PreparedStatement pstmt= null;
- // stmt = conn.createStatement();
- // String sql = "select * from t_user where username='" + user.getUsername() + "'";
- // rs = stmt.executeQuery(sql);
- try {
- // String sql = "insert into t_user value('" + user.getUsername() + "','" + user.getPassword() + "')";
- String sql2 = "insert into t_user value(?,?)";
- pstmt = conn.prepareStatement(sql2);
- pstmt.setString(1, user.getUsername());
- pstmt.setString(2, user.getPassword());
- int i;
- i = pstmt.executeUpdate();
- if (i == 1) {
- return true;
- } else {
- return false;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- JDBCUtil.close(pstmt, conn);
- }
- //以上try里面出现错误直接返回false
- return false;
- }
-
- @Override
- public User queryByName(String username) {
- Connection conn = JDBCUtil.getConnection();
- ResultSet rs;
- PreparedStatement pstmt;
- String sql1 = "select * from t_user where username=?";
- try {
- pstmt = conn.prepareStatement(sql1);
- pstmt.setString(1, username);
- rs = pstmt.executeQuery();
- while(rs.next()){
- String username1 = rs.getString("username");
- String password = rs.getString("password");
- User user=new User();
- user.setUsername(username1);
- user.setPassword(password);
- return user;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
运行UserWeb


