使用httpServlet和数据库mysql实现用户登录注册

该文展示了创建一个简单的JavaWeb项目的过程,包括创建数据库表结构,插入测试数据,设计登录和注册页面,以及实现Servlet处理登录和注册请求。用户可以通过页面填写信息进行登录或注册,后台使用MySQL数据库进行数据验证和存储。
摘要由CSDN通过智能技术生成
  1. 创建测试数据

#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;


#创建表
create table t_user
(
    uid int primary key auto_increment,
    username varchar(20),
    password varchar(20),
    phone varchar(11),
    address varchar(50)
);

插入一些数据


insert into t_user(username,password,phone,address) values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address) values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address) values('小美','123','18565234759','信阳');

select * from t_user where username=? and password=?
select * from t_user;
  1. 创建java项目

  1. 首页index.jsp的页面布局

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>这是一个web项目</title>
  </head>
  <body>
  <h2>学习java web</h2>
  <a href="Login.jsp">登录</a>
  <a href="ZhuCe.jsp">注册</a>

  </body>
</html>

结果运行是这个样子

  1. 通过index.jsp进入Login.jsp登录页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<h2>登录</h2>
<form action="login" method="post">
    账户:<input type="text" name="username" value=""><br>
    密码:<input type="password" name="password" value=""><br>//忘记加了
    <input type="submit" value="登录">
</form>
</body>
</html>

注册页面的设计

<%--
  Created by IntelliJ IDEA.
  User: 30839
  Date: 2023/2/14
  Time: 10:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>
<h2>注册</h2>
<form action="zhuce" method="post">
    添加账号:<input type="text" name="user" value=""><br>
    设置密码:<input type="password" name="pwd" value=""><br>
    添加电话:<input type="text" name="phone" value=""><br>
    添加地址:<input type="text" name="address" value=""><br>

    <input type="submit" value="注册">
</form>

</body>
</html>

结果演示

当然通过长按Ctrl点击login进入login登录的映射

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.xue.servlet.Login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>zhuce</servlet-name>
        <servlet-class>com.xue.servlet.Zhuce</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>zhuce</servlet-name>
        <url-pattern>/zhuce</url-pattern>
    </servlet-mapping>
</web-app>

5.在编写使用httpServlet和数据库mysql连接实现用户登录

package com.xue.servlet;

import com.xue.bean.User;

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.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Login extends HttpServlet {
    Connection connection = null;
    PreparedStatement pstm = null;
    ResultSet rs = null;
    User login = null;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Login-get.....");
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Login-post");
        //前端请求(request),后端处理后,给前端响应

        //三个不同的获取请求地址
        String URI = req.getRequestURI();
        String contextPath = req.getContextPath();
        String servletPath = req.getServletPath();
        //dayindizhi
        System.out.println(URI);//项目名称和资源路径
        System.out.println(contextPath);//项目名称
        System.out.println(servletPath);//资源路径

//        String RemoteAddr = req.getRemoteAddr();
//        String remoteHost = req.getRemoteHost();
//        //dayin
//        System.out.println(RemoteAddr);
//        System.out.println(remoteHost);
        System.out.println("--------------------------------6--------------------");








        //1.设置请求和响应的编码格式,响应格式
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //2.获取从请求中获取用户提交的参数内容
        String user = req.getParameter("username");//获取账户
        String pwd = req.getParameter("password");//获取密码
        System.out.println(user);
        System.out.println(pwd);
        //3.执行业务处理


        try {
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
             connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&sererTimezone=UTC", "root", "root");
            //3.定义SQL语句
            String sql = "select * from t_user where username=? and password=?";
            //4.获得预处理对象
            pstm =  connection.prepareStatement(sql);
            //5.传参
            pstm.setObject(1,user);
            pstm.setObject(2,pwd);
            //6.执行查询
            rs = pstm.executeQuery();
            //7.解析结果集
            if(rs.next()){
               login=new User();
               //从结果集获取数据,封装到实体类对象中
               int uid = rs.getInt("uid");
               login.setUid(uid);
               login.setUsername(rs.getString("username"));
               login.setPassword(rs.getString("password"));
               login.setPhone(rs.getString("phone"));
               login.setAddress(rs.getString("address"));
            }
        } catch (Exception e){
            e.printStackTrace();
        }finally {
            //8.关闭资源
            try{
                if (rs!=null){
                    rs.close();
                }
                if (pstm!=null){
                    pstm.close();
                }
                if (connection!=null){
                    connection.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //9.判断登录的用户信息是否为空
        if (login != null){
            //登录成功,跳转主页
        resp.sendRedirect("zhuye.jsp");
//      resp.getWriter().write( "登录成功");
        }else{
            //登录失败,跳转错误页面
        resp.sendRedirect("error.jsp");
//      resp.getWriter().write("错误");
        }
    }

}

6.在编写使用httpServlet和数据库mysql连接实现用户注册

package com.xue.servlet;

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.*;

public class Zhuce extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login-get");
        doPost(request,response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置请求和响应的编码格式为UTF-8格式,响应格式
        System.out.println("注册");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");//设置请求编码格式为中文
        String username = request.getParameter("user");//根据表单获取用户输入账号
        String password = request.getParameter("pwd");//根据表单获取用户输入密码
        String phone = request.getParameter("phone");
        String address = request.getParameter("address");

        System.out.println(username);
        System.out.println(password);
        Connection connection = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        //2.根据用户提交的账户密码,进行数据库查询
        try{
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取数据库连接
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimezone=UTC","root","root");
            //3.定义注册的SQL语句
            String sql = "insert into t_user(username,password,phone,address) values (?,?,?,?)";
            //4.预处理SQL语句
            pstm =  connection.prepareStatement(sql);
            //5.给?赋值
            pstm.setObject(1,username);
            pstm.setObject(2,password);
            pstm.setObject(3,phone);
            pstm.setObject(4,address);
            System.out.println(username);
            System.out.println(password);
            System.out.println(phone);
            System.out.println(address);
            //6.获取数据
            int i = pstm.executeUpdate();

            //设置响应编码格式为UTF-8格式
            response.setCharacterEncoding("UTF-8");
            //设置文本或者网页的形式响应
            response.setContentType("text/html;charset=UTF-8");
            //判断是否有数据,作出响应
            if(i>0){
                //登录成功
              response.getWriter().write("注册成功");
//                response.sendRedirect("zhuye.jsp");
            }else {
                //登录失败
              response.getWriter().write("注册失败");
//                response.sendRedirect("error.jsp");
            }
        }catch (ClassNotFoundException | SQLException e){
           throw new RuntimeException(e);
        }finally {
            //7.关闭资源
           try{
              //如若rs为空,关闭资源,反之
               if (rs!=null){
                   rs.close();
               }
               if (pstm!=null){
                   pstm.close();
               }
               if (connection!=null){
                   connection.close();
               }

           } catch (SQLException e) {
               throw new RuntimeException(e);
           }
        }
    }
}



测试一下,使用随机账户密码和数据库储存的账户密码进行登录,进行和数据库储存数据对比

(1)随机数据

(2)数据库数据

(3)注册测试

(4)刷新数据库数据

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值