书籍管理系统登录注册页面

1.页面展示

1.1 登录注册页面

书籍管理系统登录注册页面

书籍管理系统登录注册页面

1.2 书籍展示页面

书籍管理系统登录注册页面

1.3 书籍编辑页面

书籍管理系统登录注册页面

1.4 书籍添加页面

书籍管理系统登录注册页面

1.5 书籍搜索页面

书籍管理系统登录注册页面

1.6 数据分析页面

书籍管理系统登录注册页面

1.7 资料修改页面

书籍管理系统登录注册页面

1.8 数据库展示

1.8.1 book表

书籍管理系统登录注册页面

书籍管理系统登录注册页面

1.8.2 bookcase表

书籍管理系统登录注册页面

书籍管理系统登录注册页面

1.8.3 reader表

书籍管理系统登录注册页面

书籍管理系统登录注册页面

2.代码下载

码云下载
github下载

3.代码分析

3.1 登录注册页面

3.1.1 登录

  • 通过post请求将数据传参到request域中获取
<div class="container">
    <div class="login-wrapper">
        <div class="header">Login</div>
        <div class="form-wrapper">
            <form action="/login?method=denglu" method="post" id="loginForm">
                <input type="text" name="username" placeholder="username" class="input-item">
                <input type="password" name="password" placeholder="password" class="input-item">
                <input class="btn" type="submit" value="登录"/>
            </form>
        </div>
        <div class="msg">
            Don't have account?<a href='zhece.jsp'>Sign up</a>
        </div>
    </div>
</div>
  • 通过getParameter("参数名")方法获取参数值和方法值
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //获取浏览器参数
    String username=req.getParameter("username");
    String password=req.getParameter("password");
    String tel=req.getParameter("tel");
    //获取当前login路由下的方法
    String method = req.getParameter("method");
}
  • 通过调用Service层方法login()来判断用户输入的用户密码是否正确,如果正确,返回获取的用户对象用于判断用户级别,跳转到指定页面,否则返回空对象
//用向上转型来保存
Object object=loginService.login(username,password);
if(object!=null) {
    //向下转型保存
    Reader reader = (Reader) object;
    //System.out.println("LoginServlet的reader="+reader);
    //1.获取session
    HttpSession session = req.getSession();
    //保存数据到服务器
    session.setAttribute("reader", reader);
    //这里判断用户级别,来进入不同页面
    switch (reader.getGrade()) {
        case 1:
            resp.sendRedirect("/bookshow.jsp");
            System.out.println("111111111111111111");
            break;
    }
}
  • Service层调用Repository层方法获取数据库数据并返回
public ReaderRepository readerRepository=new ReaderRepositoryImpl();
@Override
public Object login(String username, String password) {
    return readerRepository.login(username,password);
    //返回对象
}
  • Repository层调用数据库,借用c3p0数据库连接池来操作,这里还使用了数据库操作封装代码JdbcTools类
Reader reader = null;
@Override
public Reader login(String username, String password) {
    //之前定义的包装类用于c3p0连接池的使用
    Connection connection = JdbcTools.getConnection();
    String sql = "select * from reader where username=? and password=?";
    //执行sql语句
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    Reader reader = null;
    try {
        statement = connection.prepareStatement(sql);
        //参数代替问号
        statement.setString(1, username);
        statement.setString(2, password);
        resultSet = statement.executeQuery();
        if (resultSet.next()) {
            //单个数据的替代,
            reader = new Reader(resultSet.getInt(1), resultSet.getString(2), resultSet.getString(3), resultSet.getString(4), resultSet.getString(5), resultSet.getString(6), resultSet.getString(7), resultSet.getInt(8),resultSet.getString(10));
        }

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JdbcTools.release(connection, statement, resultSet);
    }
    return reader;
}
  • JdbcTools类主要实现对报错的处理以及选择数据池配置
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcTools {
    private static DataSource dataSource;//新建数据池
    static {
        dataSource=new ComboPooledDataSource("testc3p0");
        //连接池c3p0数据连接池
    }
    public static Connection getConnection(){
        Connection connection=null;
        try {
            connection=dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        try {
            if(connection!=null){
                connection.close();
            }
            if(statement!=null){
                statement.close();
            }
            if(resultSet!=null){
                resultSet.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3.1.2 注册

  • 注册与登录不同之处在于,注册要去判断数据库中是否已经存在该用户,同时操作数据库的语句不同,相同点在于请求方式都为post请求
//判断是否有此用户名
int panduan=loginService.hasUsername(username);
if(panduan==1){
    System.out.println("已有账号");
}else{
    //无用户
    //用向上转型来保存
    int i=loginService.registered(username,password,tel);
    if(i==1){
        System.out.println("注册账号成功");
        resp.sendRedirect("/login.jsp");
    }else{
        System.out.println("注册账号失败");
    }
}
  • 判断数据库中是否存在该用户
@Override
public int hasUsername(String username) {
    //之前定义的包装类用于c3p0连接池的使用
    Connection connection = JdbcTools.getConnection();
    String sql = "select * from reader where username=?";
    //执行sql语句
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    try {
        statement = connection.prepareStatement(sql);
        //参数代替问号
        statement.setString(1, username);
        resultSet = statement.executeQuery();
        if (resultSet.next()) {
            //单个数据的替代
            return 1;
        } else {
            return 0;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JdbcTools.release(connection, statement, resultSet);
    }
    return 0;
}
上一篇:MAC 中使用JDBC连接MySQL


下一篇:execute,executeQuery,executeUpdate的区别是什么?