【DAY1】JDBC+Servlet+Tomcat简单实现用户登录功能

使用JDBC+Servlet+Tomcat读取数据库中的内容,实现简单的登录功能

今天主要对之前学过的一些Java知识做了简单的复习,复习的内容主要是JDBC编程和Servlet,然后进行了简单的练习,使用JDBC+Servlet对数据库内容进行读取,实现简单的登陆功能。

一、JDBC编程

JDBC是Java Database Connectivity的简称,意思是Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,通过JDBC编程可以对数据库中数据进行查询和更新操作。
在编码过程中,对数据库中内容进行查询更新操作过程一般分为七步:
1、加载驱动
2、创建连接
3、编写sql语句
4、创建statement对象
5、执行sql获得结果集
6、处理结果集
7、关闭资源
第一步加载驱动,要选择与数据库对应的驱动,本次练习我是用的是MySQL驱动,就加载MySQL的驱动,使用以下语句进行加载

Class.forName("com.mysql.jdbc.Driver");

第二步建立连接,获得Connection对象

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/internship", "root", "123456");

第三步编写SQL语句,这边是用查询语句为例

String sql = "select * from users";

第四步获得Statement对象

 PreparedStatement preparedStatement = connection.prepareStatement(sql);

第五步执行SQL,获得结果集

ResultSet resultSet = preparedStatement.executeQuery();

第六步对获得的结果集进行处理,获得User对象的List列表

List<User> list_user = new ArrayList();
while (resultSet.next()) {
            User user = new User();
            int id = resultSet.getInt(1);
            String username = resultSet.getString(2);
            String password = resultSet.getString(3);
            user.setId(id);
            user.setName(username);
            user.setPassword(password);
            list_user.add(user);
        }

第七步关闭资源,包括Connection对象,ResultSet对象,Statement对象

resultSet.close();       
connection.close();       
statement.close();

这样整个JDBC编程的七个步骤就完成了,注意过程中会抛出异常ClassNotFoundException,SQLException等,要做相应异常处理,使用try catch在代码块中处理,或者throws抛给调用者处理。

二、实体类

编程过程中,从数据库查询的数据通常不会直接打印出来,而是使用实体类来处理。实体类通常需要包含属性、构造方法、toString方法、get和set方法,复杂的实体类还会有其他方法,在此不赘述。今日练习中,创建了实体类User,写入属性,使用Idea的快捷键Alt + insert就可以快速生成前文中提到的构造方法、toString方法、get和set方法等。
具体如下:

package com.whut.bean;

public class User {

    public User() {
    }

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    private int id;
    private String name;
    private  String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在编码中,通常会用实体类作为桥梁,连接数据处理和业务逻辑两个层面,从数据库中获得信息后,利用实体类做数据存储,将获得的信息储存在实体类对象中。

三、练习代码

在练习过程中,我将User类放到bean包中,数据处理类UserDao放到dao包中,连接数据库和关闭资源的类DaoUtil放到util包中,另将UserServlet放到了servlet包中,如下:
项目结构
UserDao.java:

package com.whut.dao;
import com.whut.bean.User;
import com.whut.util.DaoUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
    public List<User> findall() throws SQLException, ClassNotFoundException {
        List<User> list_user = new ArrayList();
        //        1、加载驱动
        //        2、创建连接
        Connection connection = DaoUtil.getConnection();
        //        3、sql语句
        String sql = "select * from users";
        //        4、statement对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //        5、执行sql获得结果集
        ResultSet resultSet = preparedStatement.executeQuery();
        //        6、处理结果集
        while (resultSet.next()) {
            User user = new User();
            int id = resultSet.getInt(1);
            String username = resultSet.getString(2);
            String password = resultSet.getString(3);
            user.setId(id);
            user.setName(username);
            user.setPassword(password);
            list_user.add(user);
        }
        //        7、关闭资源
        DaoUtil.close(resultSet,connection,preparedStatement);
        return list_user;
    }

public void DeleteBYId(int id) throws SQLException, ClassNotFoundException {
        Connection connection = DaoUtil.getConnection();
        String sql = "delete from users where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.executeUpdate();
        DaoUtil.close(null,connection,statement);
    }

public static boolean hasUser(String username, String password) throws SQLException, ClassNotFoundException {
        boolean flag = false;
        Connection connection = DaoUtil.getConnection();
        String sql = "select * from users where username = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,username);
        ResultSet resultSet = statement.executeQuery();
        if(resultSet.next()){
            if(resultSet.getString(3).equalsIgnoreCase(password)){
                flag = true;
            }
        }
        return flag;
    }
}

DaoUtil.java

package com.whut.util;
import java.sql.*;
public class DaoUtil {
    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:1433/internship", "root", "0121710870622");
        //System.out.println("Connection success");
        return connection;
    }
public static void close(ResultSet resultSet, Connection connection, Statement statement) throws SQLException {
        if(resultSet != null)
            resultSet.close();
        if(connection != null)
            connection.close();
        if(statement != null)
            statement.close();
    }
}

UserServlet.java

package com.whut.servlet;
import com.whut.bean.User;
import com.whut.dao.UserDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //resp.getWriter().write("hello servlet");
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        try{
            if(UserDao.hasUser(username, password)){
                resp.getWriter().write("Login successful!");
            }else{
                resp.getWriter().write("Don't have you username or password is wrong, please check!");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

在index.jsp加入标签,添加输入框和按钮

<p id="login">
    <form method="get" action="login">
    <p>用户: <input type="text" placeholder="username" name="username"/></p>
    <p>密码: <input type="password" placeholder="password" name="password"/></p>
    <button type="submit">登录</button>
  </form>
  </p>

在web.xml中加入对servlet的声明

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.whut.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

登录界面:
登录界面
成功界面:
登录成功
没有该用户或者密码错误界面:

失败界面

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值