idea中Javaweb一用工具类连接数据库实现简单登录

这篇文章简单讲一下java如何连接数据库,实现登录.

首先我们来看一下有关数据库的部分

在这里插入图片描述

这是数据库编码使用utf-8,存放了账号、密码

我们来看一下idea中properties,有关数据库的连接驱动和路径

在这里插入图片描述
这里我建立了一个存放properties的包,下面是相关内容

driverClass = com.mysql.jdbc.Driver//这里是mysql5.7版本的连接驱动,mysql8版本的驱动自行更改

url = jdbc:mysql://localhost:3306/javaweb?useUnicode=true&characterEncoding=utf8&useSSL=false
//这里javaweb是数据库名称,自行更改


username = root
//数据库用户名

password = 123456
//数据库用户的密码

下面我们来看一下项目目录:
在这里插入图片描述
在这里插入图片描述

jstl和standard架包不需要导入,其他架包、依赖的根据自己进行导入

我们先看一下pojo层存放实体类:

package pojo;

public class User {
private String username;
private String password;

public User() {
}

public User(String username, String password) {
    this.username = username;
    this.password = password;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

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

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

dao层接口类:

package dao;

import java.util.List;

public interface UserDao<T> {

public List<T> queryAll(String username);

}

impl实现类:

package dao.impl;

import dao.UserDao;
import pojo.User;
import util.JDBCUtil;

import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements UserDao {
@Override
public List<User> queryAll(String username) {
    String sql = "SELECT * FROM tb_user where username=?";
    List<User> userList = JDBCUtil.executeQuery(sql,User.class,username);

    return userList;
}
}

service层:

package service;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import pojo.User;

import java.util.List;

public class LoginService {


public boolean Login(String username, String password) {

    UserDao userDao = new UserDaoImpl();
    List<User> userList = userDao.queryAll(username);

    if (userList.size() > 0) {
        if (password.equals(userList.get(0).getPassword())) {
            return true;
        }
    }
    return false;
}

}

servlet层:

package servlet;

import service.LoginService;

import javax.servlet.ServletContext;
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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "LoginServlet" ,value = "/LoginServlet")

public class LoginServlet extends HttpServlet {


LoginService loginService = new LoginService();



@Override

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

    // 获取客户端请求 判断是登录请求还是注册请求
    this.Login(request,response);



}

private void Login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    HttpSession session = request.getSession();
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if(loginService.Login(username,password)){
        session.setAttribute("username",username);
        response.sendRedirect("/jsp/index.jsp");
    }else {
        session.setAttribute("msg","账号密码错误");
        request.getRequestDispatcher("/jsp/Login.jsp").forward(request,response);

    }
}

}

util工具类:

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;



public class JDBCUtil {
static Properties props = new Properties();
static {
    //加载db.properties文件;
    InputStream in = JDBCUtil.class.getClassLoader().getResourceAsStream("properties\\db.properties");
        try {
            //加载到Properties集合中
            props.load(in);
            //连接数据库的驱动
            Class.forName(props.getProperty("driverClass"));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

}



/**
 * 获取一个连接对象
 * @return
 */
public static Connection getConnection() throws SQLException {
    return DriverManager.getConnection(props.getProperty("url"),props.getProperty("username"),props.getProperty("password"));
}



/**
 * 关闭资源
 */
public  static void close(ResultSet rs ,PreparedStatement pstmt,Connection conn){
    try {
        if(rs!=null){
            rs.close();
        }
        if(pstmt!=null){
            pstmt.close();
        }
        if(conn!=null){
            conn.close();
        }
    }catch (SQLException e){
        e.printStackTrace();
    }
}


/**
 * 执行增删改的方法
 * @return
 */
//executeUpdate,用于产生单个结果集的语句,返回值是一个整数,指示受影响的行数(即更新计数)
//Object...parms(变长数组)调用此方法可以不传入参数,Object[]params调用此方法必须传入参数
public static int executeUpdate(String sql,Object... parms){
    //先连接,然后执行数据库语句,最后关闭资源
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
        conn =JDBCUtil.getConnection();
        pstmt = conn.prepareStatement(sql);

        //给数组集赋值
        if(parms!=null || parms.length>0){
            for(int i=0;i<parms.length;i++){
                //遍历,给每个数组(即数据库的行中的每一列)赋值
                pstmt.setObject(i+1,parms[i]);
            }
        }
        return pstmt.executeUpdate();
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }

    return 0;
}

/*
Classclass,哪个实现类的方法调用List executeQuery,就将实现类的方法的参数传入List executeQuery做parms
这样就能调用这个封装查询方法
*/

public static  <T> List<T> executeQuery(String sql , Class<T> tClass,Object... parms){
Connection conn=null;
PreparedStatement pstmt=null;
try {

    conn=JDBCUtil.getConnection();
    pstmt=conn.prepareStatement(sql);

    if (parms !=null && parms.length>0){
        for (int i = 0; i < parms.length; i++) {
            pstmt.setObject(i+1,parms[i]);
        }
    }
    return JDBCUtil.parseResultSet(pstmt.executeQuery(),tClass);
} catch (SQLException throwables) {
    throwables.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InstantiationException e) {
    e.printStackTrace();
} finally {
    JDBCUtil.close(null, pstmt, conn);
}
return null;

}



/**
 * 解析ResultSet
 *   返回值?
 *   参数?
 *   ResultSet的一条记录的索引位置是从1开始的,而不是从0开始。
 *
 */
public static <T> List<T> parseResultSet(ResultSet rs, Class<T> clazz) throws SQLException, IllegalAccessException, InstantiationException {
    List<T>  list = new ArrayList<>();
    if(rs == null){
        return null;
    }
    while(rs.next()){
        

        //获取属性
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            //约定: 属性名与列名一样: 使用别名
            field.set(t,rs.getObject(field.getName()));//t相当于对象的引用
            //找set方法赋值
        }
        list.add(t);
    }
    return list;
}
}

jsp页面:

	<%--
Created by IntelliJ IDEA.
User: Frivolous-Scholar
 Date: 2022/10/18
 Time: 18:34
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/LoginServlet" method="post">

<label>
    用户名:<input type="text" name="username">
</label>
<br>
<label>
    密码:<input type="password" name="password">
</label>


<input type="submit" value="登录">
</form>
<div>${sessionScope.msg}</div>
</body>
</html>

最后启动tomcat输入账号密码便可.如果出错,请看自己的项目路径是否存在问题

在这里插入图片描述

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于JavaWeb + Mysql + Layui实现的宿舍管理系统源码+数据库+演示截图+项目说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 本系统采用MVC+J2EE+MYSQL实现,使用是Tomcat10.0作为WEB服务器,提供适应性强的Internet服务器功能,具有很高的执行效率。其: - JSP用于页面的设计,展示数据 - Java用来处理具体业务逻辑,后台跳转、对数据库操作,实现数据库的增、删、改等操作。 - JavaScript用于异步刷新页面和跳转页面。 本次高校宿舍管理系统能够满足用户的基本需求,方便快捷,既节省了时间,提高了效率,又节约了开发成本,给宿舍管理带来了极大的改善。 >开发工具: - 操作系统:windows 11 - Java虚拟机:JDK1.8 - Java开发工具:IntelliJ IDEA 2021.2 - Web服务器:Tomcat10.0 - 数据库系统:Mysql8.0 - 数据库管理工具:Navicat > 所用技术: - 后端方面:JavaSe核心语法、MVC(controlle层、service、dao层)模型开发、jsp相关语法(jstl标签库、el表达式)、maven构建项目和管理jar包 - 前端方面:JavaScript(jquery)核心语法、AJAX异步刷新、Layui前端 UI 框架 - 数据库方面:Mysql基本的DDL、DML语法 > 项目结构: ![image-20230107091513086](DormitoryManage.assets/image-20230107091513086.png) ```xml src |--main |--java 源代码目录 |--constant 常量 |--controller 存放servlet和页面进行交互 |--dao 存放dao和数据库进行交互 |--entity 和数据库表对应的实体类 |--exception 自定义异常信息 |--filter 过滤器 |--service 存放service处理具体业务逻辑 |--utils 存放工具类 |--resources 资源目录 |--test |--java 测试代码目录 |--resources 测试资源目录 |--webapp 具有web特性的目录 |--target |--classes 编译后的class文件目录 |--test-classes 编译后的测试class文件目录 |--artifacts web项目的成品 pom.xml Maven工程配置文件 ``` > 总结:jsp用于作页面展示,ajax用于异步刷新,java处理具体业务逻辑

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值