小言_互联网的博客

一篇超级详细的jsp+servlet+jdbc+mysql检验登录操作(IntelliJ IDEA)

581人阅读  评论(0)

第一步:首先在数据库建好表:

该表为用于登录的用户信息表。

第二步:做好前端登录的jsp页面:


代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <form action="LoginServlet" method="post">
        帐号:<input name="username" type="text"/><br>
        密码:<input name="password" type="text"/><br>
        <input value="登录" type="submit"/><br>
    </form>

</body>
</html>

第三步:集成JDBC环境

3.1 导入mysql的驱动添加到module中。

3.1.1 将下载好的mysql驱动复制粘贴到web/WEB-INF/lib中。

3.1.2 打开project Structure(Ctrl + Alt + Shift +s),点击左侧Modules,选择你要添加的module,点击右侧+按钮找到mysql的jar包,点击ok完成。


3.2 创建jdbc.properties,存放在src下。

driverclass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/stuproject
name=root
password=123456

3.3 创建用于获取连接和关闭数据库连接资源的工具类JDBCUtils.java,其中所有方法都为静态方法

public class JDBCUtils {

    static String driverclass = null;
    static String url = null;
    static String name = null;
    static String password = null;

    static{
        try {
            Properties pros = new Properties();
            // 利用类加载器classLoader获取src下的资源
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            pros.load(is);//读取输入流

            //读取属性
            driverclass = pros.getProperty("driverclass");
            url = pros.getProperty("url");
            name = pros.getProperty("name");
            password = pros.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     *  获取数据库连接
     * @return
     */

    public static Connection getConn(){

        Connection conn = null;
        try {
            //1.利用反射注册driverclass
            Class.forName(driverclass);
            //2.建立连接 参数一:协议 + 访问的数据库,参数二:用户名,参数三: 密码。
            conn = DriverManager.getConnection(url, name, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     *  关闭连接资源
     * @param conn
     */
    public static void release(Connection conn,PreparedStatement ps){
        closeConn(conn);
        closePs(ps);
    }
    public static void release(Connection conn,PreparedStatement ps,ResultSet rs){
        closePs(ps);
        closeConn(conn);
        closeRs(rs);
    }


    public static void closeConn(Connection conn){
        try {
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            conn = null;
        }
    }

    public static void closePs(PreparedStatement ps){
        try {
            if(ps !=null){
                ps.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            ps=null;
        }
    }
    public static void closeRs(ResultSet rs){
        try {
            if(rs !=null){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            rs=null;
        }
    }

}

第四步:搭建用于处理业务逻辑的DAO(操作表)和DaoImpl(实现检验登录的方法)。

4.1 UserDao接口(用于操作User表)

接口定义了一套标准,没有具体的实现。

public interface UserDao {
    /**
     *  检验登录的方法
     */
    boolean login(String username,String password);
}

4.2 UserDaoImpl实现类

该类实现了UserDao接口,用于完成检验登录的方法。

public class UserDaoImpl implements UserDao {
    /**
     *  用于检验登录的方法
     * @param username
     * @param password
     * @return
     */
    @Override
    public boolean login(String username, String password) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            //1.获取数据库连接
            conn = JDBCUtils.getConn();
            //2.预编译sql语句
            String sql = "select * from t_user where username=? and password=?";
            ps = conn.prepareStatement(sql);
            //3.填充占位符
            ps.setString(1,username);
            ps.setString(2,password);

            //4.执行查询语句
            rs = ps.executeQuery();
            //5.如果结果集有对象,则查询到了,即返回true。若没查到。则返回false
            return rs.next();

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.关闭资源
            JDBCUtils.release(conn,ps,rs);
        }

        return false;
    }
}

第五步:完成用于跳转的LoginServlet.java

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//设置request的字符集
        response.setContentType("text/html;charset=utf-8");//设置response的字符集

        //1.获取从前端页面中传过来的username和password值
        String userName = request.getParameter("username");
        String passWord = request.getParameter("password");

        //2.创建实现类的对象,调用检验登录的方法login().
        //数据库查到了即返回 true,没查到即返回 false
        UserDaoImpl userDao = new UserDaoImpl();
        boolean isSuccess = userDao.login(userName, passWord);

        if(isSuccess){
            //用于相应给客户,success为true --->登录成功
            response.getWriter().write("登录成功");
        }else{
            response.getWriter().write("登录失败");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

最后一步,运行login.jsp,输入数据库中有的username和password,登录成功

以下为工程目录:


转载:https://blog.csdn.net/qq_40598321/article/details/104861169
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场