Java web简单注册和登陆项目案例

核心技术

  • java web servlet:HttpServlet类,基于@WebServlet()注释的Servlet类的配置
  • tomcat项目部署
  • mysql数据库
  • jdbc
  • druid数据库连接池
  • html

用到的软件

  • java web集成开发环境:IntelliJ IDEA
  • 服务器:tomcat
  • mysql的可视化界面:SQLyog

用到的jar包

  • 项目所需的jar包:druid-1.0.9.jarmysql-connector-java-5.1.48-bin.jar
  • druid-1.0.9.jar:阿里巴巴的德鲁伊数据库连接池驱动包
  • mysql-connector-java-5.1.48-bin.jar:jdbc的数据库连接的驱动包

案例要求

  • 一个简单的web项目,能够实现指定账户密码的登陆操作,并且显示登陆结果
  • 实现注册和登陆功能
  • 将注册的账户存储在mysql数据库当中
  • 使用druid数据库连接池技术

项目jar包和数据库的配置

  • web项目的jar包首先要放置在web目录下的WEB-INF目录下
    在这里插入图片描述
  • 右键libs文件夹选择Add as Library
    在这里插入图片描述
  • tomcatlib目录下也添加这两个jar包(否则web项目在浏览器运行时会找不到类)
  • 数据库连接池druid的配置文件druid.properties放置到src文件夹下
    在这里插入图片描述
  • druid.properties的配置信息
    # jdbc的驱动目录,class.forName();
    driverClassName=com.mysql.jdbc.Driver
    # 数据库的url
    url=jdbc:mysql://127.0.0.1:3306/city
    # 要连接的账户
    username=root
    # 要链接账户的对应密码 
    password=root
    # 初始连接池当中connection对象的数目
    initialSize=5
    # connection对象的最大数目
    maxActive=10
    # 最大等待时间
    maxWait=3000
    
  • 在mysql数据库当中创建users表
    CREATE TABLE users (
    USER VARCHAR(30) UNIQUE NOT NULL,
    PASSWORD VARCHAR(50) NOT NULL
    );
    

编写druid工具类

  • 要求:实现获取Connection对象方法,实现PreparedStatement,ResultSet,Connection对象的close方法
  • DruidUtils类代码
    package cn.web.jdbc;
    
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class DruidUtils {
    
        private static DataSource dataSource;
    
        static {
            Properties properties = new Properties();
            ClassLoader classLoader = DruidUtils.class.getClassLoader();
            InputStream inputStream = classLoader.getResourceAsStream("druid.properties");
            try {
                properties.load(inputStream);
                dataSource = DruidDataSourceFactory.createDataSource(properties);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static DataSource getDataSource() {
            return dataSource;
        }
    
        public static Connection getConnection() {
            try {
                return dataSource.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void close(PreparedStatement preparedStatement) {
            if(preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void close(Connection connection) {
            if(connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void close(ResultSet resultSet) {
            if(resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void close(PreparedStatement preparedStatement, Connection connection, ResultSet resultSet) {
            close(preparedStatement);
            close(resultSet);
            close(connection);
        }
    
        public static void close(PreparedStatement preparedStatement, Connection connection) {
            close(preparedStatement);
            close(connection);
        }
    }
    
    

编写UserManager类(管理用户对象)

  • 要求:实现注册和登陆功能
  • UserManager类代码
    package cn.web.user;
    
    import cn.web.jdbc.DruidUtils;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class UserManager {
    
        private static String REGISTER_SQL = "INSERT INTO users VALUES (?, ?)";
        private static String LOGIN_SQL = "SELECT * FROM users WHERE user = ? AND password = ?";
    
        private static Connection connection;
        private static PreparedStatement preparedStatement;
        private static ResultSet resultSet;
    
        private static void getConnection() {
            connection = DruidUtils.getConnection();
        }
    
        private static void getPreparedStatement(String sql) {
            try {
                preparedStatement = connection.prepareStatement(sql);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        private static void setPreparedStatement(String user, String password) {
            try {
                preparedStatement.setString(1, user);
                preparedStatement.setString(2,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        public static boolean login(String user, String password) {
            boolean count = true;
            getConnection();
            getPreparedStatement(LOGIN_SQL);
            setPreparedStatement(user, password);
    
            try {
                resultSet = preparedStatement.executeQuery();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            try {
                if(!resultSet.next()) {
                    count = false;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            DruidUtils.close(preparedStatement, connection, resultSet);
    
            return count;
        }
    
    
        public static boolean register(String user, String password) {
            int count = -1;
            getConnection();
            getPreparedStatement(REGISTER_SQL);
            setPreparedStatement(user, password);
    
            try {
                count = preparedStatement.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            DruidUtils.close(preparedStatement, connection, resultSet);
            return count == 1 ? true : false;
        }
    }
    

实现注册和登陆的servlet类

  • 要求:对注册和登陆返回结果
  • LoginServlet类代码实现
    package cn.web.net;
    
    import cn.web.user.UserManager;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet(urlPatterns = {"/login"})
    public class LoginServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html; charset=utf-8");
            boolean result = UserManager.login(request.getParameter("user"), request.getParameter("password"));
            if(result) {
                response.getWriter().write("登陆成功!");
            } else {
                response.getWriter().write("登陆失败!");
            }
        }
    }
    
    
  • RegisterServlet类的代码实现
    package cn.web.net;
    
    import cn.web.jdbc.DruidUtils;
    import cn.web.user.UserManager;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    @WebServlet(urlPatterns = {"/register"})
    public class RegisterServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html; charset=utf-8");
            boolean result = UserManager.register(request.getParameter("user"), request.getParameter("password"));
            if(result == true) {
                response.getWriter().write("注册成功!");
            } else {
                response.getWriter().write("注册失败!");
            }
        }
    }
    
    

编写登陆和注册页面的html文件

注册页面

  • register.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
    </head>
    <body>
    开发者:tom<br>
    <form action="/register" method="post">
        <input type="text" placeholder="user" name="user"><br>
        <input type="text" placeholder="password" name="password"><br>
        <input type="submit" name="注册">
    </form>
    </body>
    </html>
    
  • 页面效果
    在这里插入图片描述

登陆页面

  • login.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登陆</title>
    </head>
    <body>
    <form action="/login" method="post">
        <input type="text" placeholder="user" name="user"><br>
        <input type="text" placeholder="password" name="password"><br>
        <input type="submit" value="登陆">
    </form>
    </body>
    </html>
    
  • 页面效果
    在这里插入图片描述

项目的部署

在这里插入图片描述
在这里插入图片描述

在这次项目当中踩到的坑

  • jar包的lib文件要放在web/WEB-INF下面
  • jar包还应该放在tomcatlib文件夹下一份
  • 项目路径尽量不要有中文名字,如果有中文名字使用java.net.URLDecoder.decode()方法进行重新编码
  • 页面当中使用response.getWriter().write()方法出现中文乱码,使用response.setContentType("text/html; charset=utf-8")进行编码的设定

项目源代码下载

  • 链接:https://pan.baidu.com/s/1nkdKUhrGlptmMBkcVKHbzw
  • 提取码:n1p1
发布了76 篇原创文章 · 获赞 18 · 访问量 2730

猜你喜欢

转载自blog.csdn.net/qq_43446165/article/details/104097521