web连接数据库完成登录注册

​​​​​​完整文件目录如下:

  1. 主页面的编写(.jsp文件)

<html>
  <head>
    <title>淘宝网</title>
  </head>
  <body>
  <h1>欢迎来到主页面!</h1>
  <a href="Login.jsp">去登陆</a><br>
  <a href="register.jsp">去注册</a>
  </body>
</html>

给客户两个选项(登陆/注册)---完成页面如下

1.登陆页面编写 

<html>
<head>
    <title>登陆页面</title>
</head>
<body>
    <h2>欢迎学习WEB!</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>

1.2注册页面

<html>
<head>
    <title>注册页面</title>
</head>
<body>
    <h1>注册页面</h1>
    <form action="register" method="post">
        账号:<input type="text" name="username" value=""> <br>
        密码:<input type="password" name="password" value=""> <br>
        再次输入密码:<input type="password" name="password" value=""> <br>
        手机号:<input type="text" name="phone" value=""> <br>
        地址:<input type="text" name="address" value=""> <br>
        <input type="submit" value="注册">&nbsp;&nbsp;&nbsp;
        <a href="Login.jsp">已有账号?点击登录</a>
    </form>
</body>
</html>

1.3项目页面

<html>
<head>
    <title>主页</title>
</head>
<body>
    <h1>欢迎项目主页</h1>
    <h2>主页信息展示</h2>
    <table>
        <thead>
        <tr>
            <th>商品编号</th>
            <th>商品名称</th>
            <th>商品价格</th>
            <th>商品介绍</th>
        </tr>
        </thead>
 
        <tbody id="list">
            <%
                // 获取session
                HttpSession session1 = request.getSession();
                // 从session中取出数据
                List<Goods> goodsList = (List<Goods>) session1.getAttribute("goodsList");
                // 遍历集合中的元素
                for (Goods goods : goodsList) {
            %>
                <!--使用java脚本获取集合中对象的元素,放入html标签中-->
                <tr>
                    <td><%=goods.getGid()%></td>
                    <td><%=goods.getGname()%></td>
                    <td><%=goods.getPrice()%></td>
                    <td><%=goods.getMark()%></td>
                </tr>
            <%
                }
            %>
 
        </tbody>
    </table>
 
</body>
</html>

 1.4错误页面

<html>
<head>
    <title>错误页</title>
</head>
<body>
    <h1>密码输入错误!!!</h1>
    <a href="index.jsp">回到主页</a> <br>
    <a href="Login.jsp">回到登录页</a>
</body>
</html>

 2.登陆页面编写

<html>
<head>
    <title>登陆页面</title>
</head>
<body>
    <h1>登陆页面</h1>
    <h2>欢迎学习WEB!</h2>
    <form action="login" method="post">
        账号:<input type="text" name="username" value=""> <br>
        密码:<input type="password" name="password" value=""> <br>
        <input type="submit" value="登录">&nbsp;&nbsp;&nbsp;
        <a href="register.jsp">没有账号?点击注册</a>
    </form>
</body>
</html>

2.1实体类

package com.man.dao;
 
public class User {
    private Integer uid;
    private String username;
    private String password;
    private String phone;
    private String address;
 
    public User() {
    }
 
    public User(Integer uid, String username, String password, String phone, String address) {
        this.uid = uid;
        this.username = username;
        this.password = password;
        this.phone = phone;
        this.address = address;
    }
 
    public Integer getUid() {
        return uid;
    }
 
    public void setUid(Integer uid) {
        this.uid = uid;
    }
 
    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;
    }
 
    public String getPhone() {
        return phone;
    }
 
    public void setPhone(String phone) {
        this.phone = phone;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

 goods类

package com.man.bean;
 
public class Goods {
 
    private Integer gid;
    private String gname;
    private Double price;
    private String mark;
 
 
    public Integer getGid() {
        return gid;
    }
 
    public void setGid(Integer gid) {
        this.gid = gid;
    }
 
    public String getGname() {
        return gname;
    }
 
    public void setGname(String gname) {
        this.gname = gname;
    }
 
    public Double getPrice() {
        return price;
    }
 
    public void setPrice(Double price) {
        this.price = price;
    }
 
    public String getMark() {
        return mark;
    }
 
    public void setMark(String mark) {
        this.mark = mark;
    }
 
    @Override
    public String toString() {
        return "Goods{" +
                "gid=" + gid +
                ", gname='" + gname + '\'' +
                ", price=" + price +
                ", mark='" + mark + '\'' +
                '}';
    }
}

2.2编写登录java代码

package com.man.servlet;
 
 
import com.man.services.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 {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login-doGet...");
        doPost(request,response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login-doPost...");
        // 1.设置请求和响应的编码格式,以及响应的格式
        request.setCharacterEncoding("utf-8"); // 设置获取数据的格式
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html:charset=UTF-8");//以什么样的格式(文本/网页)响应
 
        // 2.获取请求的参数
        String username = request.getParameter("username"); //根据表单的name属性获取用户输入的账号密码
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);
 
        // 3.执行业务处理
        Connection connection = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        User login = null;
 
 
        try{
            // 1.加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2.获取数据库连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC","root","root");
            // 3.定义登陆的sql语句
            String sql = "select * from t_user where username=? and password=?" ;
            // 4.获取预处理对象
            pstm = connection.prepareStatement(sql);
            // 5.传参
            pstm.setObject(1,username);
            pstm.setObject(2,password);
            // 6.执行查询
            rs = pstm.executeQuery();
            // 7.解析结果集
            if (rs.next()){
                login = new User();
                // 从结果集中获取数据,封装到实体类中
                login.setUid(rs.getInt("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();
            }
 
        }
 
 
        // 4.判断登陆信息是否为空
        if (login!=null){
            // 登陆成功,跳转到主页
            response.sendRedirect("zhuye.jsp");
        }else {
            // 登陆失败,跳转到错误页
            response.sendRedirect("error.jsp");
        }
    }
}

 userDao类

package com.man.dao;
 
import com.man.bean.User;
import com.man.util.JDBCUtil;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
public class UserDao {
 
    Connection con = null;
    ResultSet rs = null;
    PreparedStatement pstm = null;
    User login = null;
    int row = 0;
 
    public User login(String username, String password) {
        try{
            // 1.获取数据库连接
            con = JDBCUtil.getCon();
            // 2.定义登陆的sql语句
            String sql = "select * from t_user where username=? and password=?" ;
            // 3.获取预处理对象
            pstm = con.prepareStatement(sql);
            // 4.传参
            pstm.setObject(1,username);
            pstm.setObject(2,password);
            // 5.执行查询
            rs = pstm.executeQuery();
            // 6.解析结果集
            if (rs.next()){
                login = new User();
                // 从结果集中获取数据,封装到实体类中
                login.setUid(rs.getInt("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();
        }
        return login;
    }
 
    public int register(User user) {
        try{
            // 1.获取数据库连接
            con = JDBCUtil.getCon();
            // 2.定义注册的新增sql语句
            String sql = "insert into t_user(username,password,phone,address) values(?,?,?,?)" ;
            // 3.获取预处理对象
            pstm = con.prepareStatement(sql);
            // 4.传参
            pstm.setObject(1,user.getUsername());
            pstm.setObject(2,user.getPassword());
            pstm.setObject(3,user.getPhone());
            pstm.setObject(4,user.getAddress());
            // 5.执行更新(增删改)
            row = pstm.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            JDBCUtil.close(con,pstm);
        }
 
        return row;
    }
}

 

login类代码

package com.man.servlet;
 
 
import com.man.bean.User;
import com.man.dao.UserDao;
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 java.io.IOException;
 
@WebServlet("/login")
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Login-doGet...");
        doPost(request,response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.设置请求和响应的编码格式,以及响应的格式
        request.setCharacterEncoding("utf-8"); // 设置获取数据的格式
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html:charset=UTF-8");//以什么样的格式(文本/网页)响应
 
        // 2.获取请求的参数
        String username = request.getParameter("username"); //根据表单的name属性获取用户输入的账号密码
        String password = request.getParameter("password");
        System.out.println(username);
        System.out.println(password);
 
        // 3.执行业务处理
        UserDao userDao = new UserDao();
        User login = userDao.login(username, password);
 
        // 4.判断登陆信息是否为空
        if (login!=null){
            // 登陆成功,当前servlet业务处理完毕---后续操作由别人完成---请求别的地址
            request.getRequestDispatcher("selectAllGoods").forward(request,response);
        }else {
            // 登陆失败,跳转到错误页
            response.sendRedirect("error.jsp");
        }
    }
}

 SelectAllGoods 类

package com.man.servlet;
 
import com.man.bean.Goods;
import com.man.dao.GoodsDao;
 
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
 
@WebServlet("/selectAllGoods")
public class SelectAllGoods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("SelectAllGoods-doGet...");
        doPost(request,response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.执行查询业务
        // 2.查询所有商品信息
        GoodsDao goodsDao = new GoodsDao();
        List<Goods> goodsList = goodsDao.selectAllGoods();
        System.out.println(goodsList);
        // 3.把数据传递到前端页面
        // 3.1通过request获取session对象,该对象可以向前端传输数据的容器
        HttpSession session = request.getSession();
        // 4.向session中存入商品信息集合
        session.setAttribute("goodsList",goodsList);
 
        // 4.登录成功,跳转到登录页
        response.sendRedirect("zhuye.jsp");
 
    }
}

2.3工具类文件

package com.man.util;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
public class JDBCUtil {
 
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
    private static String user = "root";
    private static String psw = "root";
 
    int row = 0;
    static Connection con = null;
 
    public static Connection getCon(){
 
        try{
            // 1.加载数据库驱动
            Class.forName(driver);
            // 2.获取数据库连接
            con = DriverManager.getConnection(url, user, psw);
 
        } catch (Exception e){
            e.printStackTrace();
        }
        return con;
    }
 
    public static void close(ResultSet rs,Connection con,PreparedStatement pstm){
        // 关闭资源
        try{
            if (rs!=null){
                rs.close();
            }
            if (pstm!=null){
                pstm.close();
            }
            if (con!=null){
                con.close();
            }
 
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static void close(Connection con,PreparedStatement pstm){
        // 关闭资源
        try{
            if (pstm!=null){
                pstm.close();
            }
            if (con!=null){
                con.close();
            }
 
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

输入正确信息,数据库比对过后进入主页面

反之则进入错误页 

3.注册页面 

<html>
<head>
    <title>注册页面</title>
</head>
<body>
    <h2>欢迎学习WEB!</h2>
    <form action="zhuce" method="post">
        账号:<input type="text" name="username" value=""> <br>
        密码:<input type="password" name="password" value=""> <br>
        再次输入密码:<input type="password" name="password" value=""> <br>
        手机号:<input type="text" name="phone" value=""> <br>
        地址:<input type="text" name="address" value=""> <br>
        <input type="submit" value="注册">
    </form>
</body>
</html>

3.1编写注册java代码

package com.man.servlet;
 
import com.man.dao.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;
 
public class Zhuce extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Zhuce-doGet...");
        doPost(request, response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Zhuce-doPost...");
        // 1.设置请求和响应的编码格式,以及响应的格式
        request.setCharacterEncoding("utf-8"); // 设置获取数据的格式
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html:charset=UTF-8");//以什么样的格式(文本/网页)响应
 
        // 2.获取请求的参数
        String username = request.getParameter("username"); //根据表单的name属性获取用户输入的账号密码
        String password = request.getParameter("password");
        String phone = request.getParameter("phone");
        String address = request.getParameter("address");
        System.out.println(username);
        System.out.println(password);
        System.out.println(phone);
        System.out.println(address);
 
        // 3.执行业务处理
        Connection connection = null;
        PreparedStatement pstm = null;
        User zhuce = null;
        int a = 0;
 
        try{
            // 1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.获取数据库连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC","root","root");
            // 3.定义登陆的sql语句
            String sql = "insert into t_user(username,password,phone,address) values(?,?,?,?)" ;
            // 4.获取预处理对象
            pstm = connection.prepareStatement(sql);
            // 5.传参
            pstm.setObject(1,username);
            pstm.setObject(2,password);
            pstm.setObject(3,phone);
            pstm.setObject(4,address);
            a = pstm.executeUpdate();
            zhuce = new User();
            zhuce.setUsername(username);
            zhuce.setPassword(password);
            zhuce.setPhone(phone);
            zhuce.setAddress(address);
            // 6.处理结果
            if (a > 0) {
                System.out.println("新增成功");
            } else {
                System.out.println("新增失败");
            }
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            // 8.关闭资源
            try{
                if (pstm!=null){
                    pstm.close();
                }
                if (connection!=null){
                    connection.close();
                }
 
            }catch (Exception e){
                e.printStackTrace();
            }
 
        }
 
 
        // 4.判断登陆信息是否为空
        if (a > 0){
            // 登陆成功,跳转到主页
            response.sendRedirect("zhuye.jsp");
        }else {
            // 登陆失败,跳转到错误页
            response.sendRedirect("error.jsp");
        }
    }
}

// 执行业务处理部分用到的代码与登录业务代码在同一 .java 文件中

 @Override
    public int register(User user) {
        try{
            // 1.获取数据库连接
            con = JDBCUtil.getCon();
            // 2.定义注册的新增sql语句
            String sql = "insert into t_user(username,password,phone,address) values(?,?,?,?)" ;
            // 3.获取预处理对象
            pstm = con.prepareStatement(sql);
            // 4.传参
            pstm.setObject(1,user.getUsername());
            pstm.setObject(2,user.getPassword());
            pstm.setObject(3,user.getPhone());
            pstm.setObject(4,user.getAddress());
            // 5.执行更新(增删改)
            row = pstm.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            JDBCUtil.close(con,pstm);
        }
 
        return row;
    }

 

 输入信息点击 注册,自动跳转登录页

将刚刚注册的账号密码输入,登录进入项目主页

 

4.完成servlet映射关系配置  

4.1映射方法一

<?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>
        <!-- 起别名 -->
        <servlet-name>login</servlet-name>
        <servlet-class>com.man.servlet.Login</servlet-class>
        <!-- servlet类所在的位置:类的全类名就是 包名.类名 -->
    </servlet>
    <!-- Servlet类的映射:Servlet用来处理哪个请求 -->
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>zhuce</servlet-name>
        <servlet-class>com.man.servlet.Zhuce</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>zhuce</servlet-name>
        <url-pattern>/zhuce</url-pattern>
    </servlet-mapping>
 
</web-app>

4.2映射方法二 

将@WebServlet("/想跳转的页面")写在代码最外层,即可完成映射

5.MYSQL代码部分

#判断存在即删除数据库
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;
 
 
create table t_goods
(
    gid int primary key auto_increment,
    gname varchar(20),
    price double,
    mark varchar(100)
);
 
insert into t_goods(gname,price,mark) values('泡面',4.5,'够香够辣就是这个味!');
insert into t_goods(gname,price,mark) values('火腿',8.5,'肉质细腻Q弹!');
insert into t_goods(gname,price,mark) values('雪碧',3.5,'清爽冰凉随心爽!');
 
select * from t_goods;
 

猜你喜欢

转载自blog.csdn.net/WJY898989/article/details/129099164