mysql+jdbc连接数据库简单实现登录功能 --java

初识java web 实现简单的登录功能

  • mvc结构实现mysql 连接

  • 什么是mvc

    • MVC是模型(model)、视图(view)、控制(controller)这三个单词上的首字母组成。它是一种应用模型,它的目的是实现Web系统的职能分工。避免all in one 所有代码全部写在一个文件里的一种分工模型。
  • 实现简单登录功能

    • 登录成功,进入sccess.jsp界面,失败返回首页,并输出密码错误

数据库简单编写

  • 创建数据库
create database student;
  • 创建表
create table tbl_user(
    userId   varchar(11)  not null
        primary key,
    passWord varchar(255) not null
);
  • 导入数据
insert into tbl_user (userId,passWord) values ('admin','1234');
insert into tbl_user (userId,passWord) values ('张三','1234');

idea上准备工作

  • 创建一个干净的meavn项目

image

  • 把该项目添加web项目

导入依赖

  • junit 是为了便于测试
  • 其他是一些基础包
    • mysql 连接数据库
    • servlet-api servlet服务
    • jsp-api
    • jstl 写el表达式
<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2.1-b02</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

连接数据库

  • 使用idea连接本地数据库
    image

编写实体类User

public class User {
    private String userId;
    private String passWord;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}

UserDao层接口

public interface UserDao {
    public boolean getUser(String userID,String userPassWord);
}

UserDaoImpl实现类

public class UserDaoImpl implements UserDao{

    private String driver = "com.mysql.cj.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/student";
    private String root = "root";
    private String password = "123456";

    @Override
    public boolean getUser(String userID,String userPassWord) {
        boolean flag = false;
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        String sql = "select * from tbl_user where userId = ? and passWord = ?";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,root,password);
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,userID);
            pstm.setString(2,userPassWord);
            rs = pstm.executeQuery();
            if(rs.next()){
                flag = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                rs.close();
                pstm.close();
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return flag;
    }
}

UserService层接口

public interface UserService {

    public boolean Login(String userId,String userPassWord);
}

UserServiceImpl实现类

public class UserServiceImpl implements UserService{
    @Override
    public boolean Login(String userId, String userPassWord) {
        boolean flag = false;
        UserDao userDao = new UserDaoImpl();
        flag = userDao.getUser(userId,userPassWord);
        return flag;
    }
}

编写LoginServlet服务层

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        boolean flag = false;
        String userId = req.getParameter("userName");
        String userPassWord = req.getParameter("userPassWord");
        UserService userService = new UserServiceImpl();
        flag = userService.Login(userId,userPassWord);
        if(flag){
            User user = new User();
            user.setUserId(userId);
            user.setPassWord(userPassWord);
            req.getSession().setAttribute("user",user);
            resp.sendRedirect("jsp/success.jsp");
        }else{
            req.setAttribute("msg","用户错误");
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }

    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

配置web.xml文件

  • servlet3.0之后可以使用注解,不用配置这个文件,但是是初学者,还是先学会配置web.xml文件
<servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.hjk.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

编写login.jsp 界面

  • 简单的写了一下,一个表单的提交功能
<form action="login" method="post">
    <table>
        <tr><span style="color: aquamarine">${requestScope.msg}</span></tr>
        <tr>
            <td>用户名:</td><td><input type="text" name="userName"/></td>
        </tr>
        <tr>
            <td>密码</td><td><input type="password" name="userPassWord"/></td>
        </tr>
        <tr>
            <td></td>
            <td>
            <input type="submit" value="submit"/>
            <input type="reset" value="reset">
            </td>
        </tr>
    </table>
</form>
  • 写一个登录成功界面sccess.jsp
    -这个文件在web问价夹下面,本来想写一个拦截器,没有登录不能直接访问后面的界面,现在还没有写
<h1><span style="text-align: center"><span style="color: deeppink" >欢迎您,${sessionScope.user.userId}登录成功</span></span></h1>
  • 如果登录失败就返回登录界面

idea默认会先访问index.jsp界面,这里在web.xml配置一下,让他直接访问login.jsp

    <welcome-file-list>
        <welcome-file>/login.jsp</welcome-file>
    </welcome-file-list>

####已经可以登录了,但是还是存在中文乱码,编写一个过滤器CharacterEncoding,让它处理中文乱码

  • 这个包必须导入import javax.servlet.*;
public class CharacterEncoding implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        servletRequest.setCharacterEncoding("utf-8");
        servletRequest.setCharacterEncoding("utf-8");
		//不执行filterChain就会一直卡在这里,相当于一直拦截
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}
  • 为过滤文件配置web.xml
    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>com.hjk.filter.CharacterEncoding</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

结果展示

  • 初始界面
    image

  • 登录失败界面
    image

  • 登录成功;不加过滤器张山是不能登录成功的

  • admin
    image

  • 张三
    image

文件的整体结构

image

image

一些注意点

  • 导包的时候一定要到对
  • idea有可能在测试的时候没有lib包这个时候需要自己添加lib问价夹,并且把相应的依赖都添加进去

image

  • 服务器报404 一般是路径错误(比较好解决)
  • 500 可能是一些代码错误,或者jar没到入
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我会尽量回答你的问题。关于Java连接MySQL数据库实现登录注册功能,以下是一个简单实现步骤: 1.下载并安装MySQL数据库,安装完成后,创建一个名为“test”的数据库。 2.下载并安装JDBC驱动程序,将下载的JDBC驱动程序的jar包添加到项目的classpath中。 3.编写Java代码,实例化JDBC驱动程序,连接MySQL数据库,创建用户表,实现用户的注册和登录功能。 以下是一个简单Java代码示例: ``` import java.sql.*; public class JdbcTest { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "123456"; // 注册JDBC驱动程序 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("找不到JDBC驱动程序!"); e.printStackTrace(); return; } // 连接MySQL数据库 Connection conn = null; try { conn = DriverManager.getConnection(url, username, password); } catch (SQLException e) { System.out.println("连接MySQL数据库失败!"); e.printStackTrace(); return; } // 创建用户表 Statement stmt = null; try { stmt = conn.createStatement(); String sql = "create table if not exists user(id int primary key auto_increment, username varchar(50) not null, password varchar(50) not null)"; stmt.executeUpdate(sql); } catch (SQLException e) { System.out.println("创建用户表失败!"); e.printStackTrace(); return; } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 用户注册 PreparedStatement pstmt = null; try { String sql = "insert into user(username, password) values (?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "user1"); pstmt.setString(2, "123456"); pstmt.executeUpdate(); } catch (SQLException e) { System.out.println("用户注册失败!"); e.printStackTrace(); return; } finally { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 用户登录 ResultSet rs = null; try { String sql = "select * from user where username=? and password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "user1"); pstmt.setString(2, "123456"); rs = pstmt.executeQuery(); if (rs.next()) { System.out.println("用户登录成功!"); } else { System.out.println("用户名或密码错误!"); } } catch (SQLException e) { System.out.println("用户登录失败!"); e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 关闭数据库连接 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们先注册了JDBC驱动程序,然后连接了MySQL数据库,接着创建了一个名为“user”的用户表,实现了用户的注册和登录功能。你可以根据自己的需求修改代码中的数据库连接信息和SQL语句。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H `K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值