Java Web实现用户登录功能

news2024/11/27 0:28:04

文章目录

  • 一、纯JSP方式实现用户登录功能
    • (一)实现思路
      • 1、创建Web项目
      • 2、创建登录页面
      • 3、创建登录处理页面
      • 4、创建登录成功页面
      • 5、创建登录失败页面
      • 6、编辑项目首页
    • (三)测试结果
  • 二、JSP+Servlet方式实现用户登录功能
    • (一)实现思路
    • (二)实现步骤
      • 1、创建Web项目
      • 2、创建登录页面
      • 3、创建登录处理程序
      • 4、创建登录成功页面
      • 5、创建登录失败页面
      • 6、编辑项目首页
    • (三)测试结果
  • 三、JSP+Servlet+DB方式实现用户登录功能
    • (一)实现思路
    • (二)实现步骤
      • 1、创建数据库
      • 2、创建用户表
      • 3、创建Web项目
      • 4、创建用户实体类
      • 5、添加数据库驱动程序
      • 6、创建数据库连接管理工具类
      • 7、创建用户数据访问类
      • 8、测试用户数据访问类
  • 四、采用MVC模式实现用户注册功能
      • 1、创建Web项目
      • 2、创建内容

一、纯JSP方式实现用户登录功能

(一)实现思路

登录页面login.jsp,输入用户名和密码后,跳转到登录处理页面doLogin.jsp进行业务逻辑处理,登录成功,跳转到登录成功页面success.jsp,否则跳转到登录失败页面failure.jsp。
(二)实现步骤

1、创建Web项目

  • 创建Java Enterprise项目,添加Web Application功能
    在这里插入图片描述
    在这里插入图片描述

  • 设置项目名与保存位置
    在这里插入图片描述

  • 单击【Finish】按钮

  • 在项目结构窗口里修改Artifact名 - LoginDemo01
    在这里插入图片描述

  • 编辑服务器配置,重新部署项目
    在这里插入图片描述

2、创建登录页面

  • 登录页面 - login.jsp
    原代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<h3 style="text-align: center">用户登录</h3>
<form action="doLogin.jsp" method="post">
    <table border="1" cellpadding="10" style="margin: 0px auto">
        <tr>
            <td align="center">账号</td>
            <td><input type="text" name="username"/></td>
        </tr>
        <tr>
            <td align="center">密码</td>
            <td><input type="password" name="password"/></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="登录"/>
                <input type="reset" value="重置"/>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

3、创建登录处理页面

  • 登录处理页面 - doLogin.jsp
    原代码
<%
    // 获取登录表单数据
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    // 判断登录是否成功
    if (username.equals("易烊千玺") && password.equals("123456")) {
        // 跳转到登录成功页面,传递用户名
        response.sendRedirect("success.jsp?username=" + username);
    } else {
        // 跳转到登录失败页面,传递用户名
        response.sendRedirect("failure.jsp?username=" + username);
    }
%>

4、创建登录成功页面

  • 登录成功页面 - success.jsp
    原代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
<h3 style="text-align: center">恭喜,<%=request.getParameter("username")%>,登录成功!</h3>
</body>
</html>

5、创建登录失败页面

  • 登录失败页面 - failure.jsp
    原代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录失败</title>
</head>
<body>
<h3 style="text-align: center">遗憾,<%=request.getParameter("username")%>,登录失败!</h3>
</body>
</html>

6、编辑项目首页

  • 项目首页 - index.jsp
    原代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
    <h1 style="color: red; text-align: center">纯JSP方式实现用户登录成功能</h1>
    <h3 style="text-align: center"><a href="login.jsp">跳转到登录页面</a></h3>
  </body>
</html>

(三)测试结果

  • 启动服务器,显示首页
    在这里插入图片描述

  • 单击【跳转到登录页面】超链接
    在这里插入图片描述

  • 输入正确的用户名和密码(易烊千玺:123456)
    在这里插入图片描述

  • 单击【登录】按钮,跳转到登录成功页面
    在这里插入图片描述

  • 返回登录页面,输入错误的用户名或密码
    在这里插入图片描述

  • 单击【登录】按钮,跳转到登录失败页面
    在这里插入图片描述

二、JSP+Servlet方式实现用户登录功能

(一)实现思路

  • 登录页面login.jsp,输入用户名和密码后,跳转到登录处理程序LoginServlet进行业务逻辑处理,登录成功,跳转到登录成功页面success.jsp,否则跳转到登录失败页面failure.jsp。

(二)实现步骤

1、创建Web项目

  • 创建Java Enterprise项目,添加Web Application功能
    在这里插入图片描述

  • 设置项目名与保存位置
    在这里插入图片描述

  • 单击【Finish】按钮

  • 在项目结构窗口里修改Artifact名 - LoginDemo02
    在这里插入图片描述

  • 编辑服务器配置,重新部署项目
    在这里插入图片描述

  • 切换到【Server】选项卡
    在这里插入图片描述

2、创建登录页面

  • 登录页面 - login.jsp
  • 原代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>用户登录</title>
    </head>
    <body>
        <h3 style="text-align: center">用户登录</h3>
        <form action="login" method="post">
            <table border="1" cellpadding="10" style="margin: 0px auto">
                <tr>
                    <td align="center">账号</td>
                    <td><input type="text" name="username"/></td>
                </tr>
                <tr>
                    <td align="center">密码</td>
                    <td><input type="password" name="password"/></td>
                </tr>
                <tr align="center">
                    <td colspan="2">
                        <input type="submit" value="登录"/>
                        <input type="reset" value="重置"/>
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

3、创建登录处理程序

创建net.xyx.serlvet包,在包里创建LoginServlet

package net.xyx.servlet;

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;
import java.net.URLEncoder;

@WebServlet(name = "LoginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置请求对象字符编码格式
        request.setCharacterEncoding("utf-8");
        // 获取登录表单数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 判断登录是否成功
        if (username.equals("无心剑") && password.equals("903213")) {
            // 采用重定向,跳转到登录成功页面
            response.sendRedirect("success.jsp?username=" + URLEncoder.encode(username, "utf-8"));
        } else {
            // 采用重定向,跳转到登录失败页面
            response.sendRedirect("failure.jsp?username=" + URLEncoder.encode(username, "utf-8"));
        }
    }

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

4、创建登录成功页面

  • 登录成功页面 - success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>登录成功</title>
    </head>
    <body>
        <h3 style="text-align: center">恭喜,<%=request.getParameter("username")%>,登录成功!</h3>
    </body>
</html>

5、创建登录失败页面

  • 登录失败页面 - failure.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>登录失败</title>
    </head>
    <body>
        <h3 style="text-align: center">遗憾,<%=request.getParameter("username")%>,登录失败!</h3>
    </body>
</html>

6、编辑项目首页

  • 项目首页 - index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>首页</title>
    </head>
    <body>
        <h1 style="color: red; text-align: center">JSP+Servlet方式实现用户登录功能</h1>
        <h3 style="text-align: center"><a href="login.jsp">跳转到登录页面</a></h3>
    </body>
</html>

(三)测试结果

  • 启动服务器,显示首页
    在这里插入图片描述

  • 单击【跳转到登录页面】超链接
    在这里插入图片描述

  • 输入正确的用户名和密码(易烊千玺:001128)

  • 单击【登录】按钮,跳转到登录成功页面
    在这里插入图片描述

  • 返回登录页面,输入错误的用户名或密码

  • 单击【登录】按钮,跳转到登录失败页面
    在这里插入图片描述

三、JSP+Servlet+DB方式实现用户登录功能

(一)实现思路

总体上采用MVC架构。登录页面login.jsp,输入用户名和密码后,跳转到登录处理程序LoginServlet进行业务逻辑处理,调用服务层,服务层调用数据访问层(DAO),连接数据库,查询数据库,以此判断是否登录成功。登录成功,跳转到登录成功页面success.jsp,否则跳转到登录失败页面failure.jsp。
MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责。

(二)实现步骤

1、创建数据库

创建数据库 - test
在这里插入图片描述

  • 单击【确定】按钮

2、创建用户表

创建用户表结构 - t_user
在这里插入图片描述

3、创建Web项目

  • 创建Java Enterprise项目,添加Web Application功能
    在这里插入图片描述

  • 设置项目名与保存位置
    在这里插入图片描述

  • 单击【Finish】按钮

  • 在项目结构窗口里修改Artifact名 - LoginDemo03
    在这里插入图片描述

  • 编辑服务器配置,重新部署项目
    在这里插入图片描述

  • 切换到【Server】选项卡

在这里插入图片描述

4、创建用户实体类

  • 创建net.xyx.bean包,然后在包里创建User类,跟用户表(t_user)对应,简称ORM
    在这里插入图片描述
package net.xyx.bean;

import java.util.Date;

/**
 * 功能:用户实体类
 * 作者:xyx
 * 日期:2023年05月19日
 */
public class User {
    private int id;
    private String username;
    private String password;
    private String telephone;
    private Date registerTime;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public Date getRegisterTime() {
        return registerTime;
    }

    public void setRegisterTime(Date registerTime) {
        this.registerTime = registerTime;
    }

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

5、添加数据库驱动程序

  • 在WEB-INF目录下创建lib目录,添加数据库驱动程序
  • 将数据库驱动程序(jar包)作为库添加到项目

在这里插入图片描述

在这里插入图片描述

6、创建数据库连接管理工具类

  • 创建net.xyx.dbutils包,在包里创建ConnectionManager
    在这里插入图片描述
package net.xyx.dbutils;

import javax.swing.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 功能:数据库连接管理类
 * 作者:xyx
 * 日期:2020年06月05日
 */
public class ConnectionManager {
    private static final String DRIVER = "com.mysql.jdbc.Driver"; // 数据库驱动程序
    private static final String URL = "jdbc:mysql://localhost:3306/student/test?useSSL=false"; // 数据库统一资源标识符
    private static final String USER = "root"; // 数据库用户
    private static final String PASSWORD = "1"; // 数据库密码

    //私有化构造方法,拒绝实例化
    private ConnectionManager() {
    }

    /**
     * 获取数据库连接静态方法
     *
     * @return 数据库连接对象
     */
    public static Connection getConnection() {
        // 定义数据库连接
        Connection conn = null;

        try {
            // 安装数据库驱动程序
            Class.forName(DRIVER);
            // 获取数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 返回数据库连接
        return conn;
    }

    /**
     * 关闭数据连接静态方法
     *
     * @param conn
     */
    public static void closeConnection(Connection conn) {
        // 判断数据库连接是否非空
        if (conn != null) {
            try {
                // 判断连接是否未关闭
                if (!conn.isClosed()) {
                    // 关闭数据库连接
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 主方法:测试两个静态方法
     *
     * @param args
     */
    public static void main(String[] args) {
        // 获取数据库连接
        Connection conn = getConnection();
        // 判断数据库连接是否成功
        if (conn != null) {
            JOptionPane.showMessageDialog(null, "恭喜,数据库连接成功!");
        } else {
            JOptionPane.showMessageDialog(null, "遗憾,数据库连接失败!");
        }
        // 关闭数据库连接
        closeConnection(conn);
    }
}

7、创建用户数据访问类

  • 在net.xyx根包里创建dao子包,然后在子包里创建UserDao
package net.xyx.dao;

import net.huawei.bean.User;
import net.huawei.dbutils.ConnectionManager;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 功能:用户数据访问类
 * 作者:xyx
 * 日期:2023年05月19日
 */
public class UserDao {
    /**
     * 用户登录方法
     * @param username
     * @param password
     * @return 用户对象(非空:登录成功,否则登录失败)
     */
    public User login(String username, String password) {
        // 声明用户对象
        User user = null;

        // 获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        try {
            // 定义SQL字符串
            String strSQL = "SELECT * FROM t_user WHERE username = ? AND password = ?";
            // 创建预备语句对象
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 设置占位符
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            // 执行查询,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 判断结果集是否为空
            if (rs.next()) {
                // 创建用户对象
                user = new User();
                // 利用当前记录字段值来设置用户对象属性
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setTelephone(rs.getString("telephone"));
                user.setRegisterTime(rs.getTimestamp("register_time"));
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            // 关闭数据库连接
            ConnectionManager.closeConnection(conn);
        }

        // 返回用户对象
        return user;
    }
}

8、测试用户数据访问类

  • 在net.xyx根包里创建test子类,在子包里创建TestUser
package net.xyx.test;

import net.xyx.bean.User;
import net.xyx.dao.UserDao;
import org.junit.Test;

/**
 * 功能:测试用户数据访问类
 * 作者:xyx
 * 日期:2023年05月19日
 */
public class TestUserDao {
    @Test
    public void testLogin() {
        String username = "无心剑";
        String password = "12345";

        // 创建用户数据访问对象
        UserDao userDao = new UserDao();
        // 调用登录方法,返回用户对象
        User user = userDao.login(username, password);
        // 判断用户登录是否成功
        if (user != null) { // 成功
            System.out.println("恭喜,用户[" + username + "]登录成功~");
        } else { // 失败
            System.out.println("遗憾,用户[" + username + "]登录失败~");
        }
    }
}

  • 修改用户名和密码,再次运行程序,提示登录失败

四、采用MVC模式实现用户注册功能

1、创建Web项目

  • 创建Java Enterprise项目,添加Web Application功能

在这里插入图片描述

  • 设置项目名与保存位置
    在这里插入图片描述
  • 在项目结构窗口里修改Artifact名 - register
    在这里插入图片描述
  • 编辑服务器配置,重新部署项目
    在这里插入图片描述

2、创建内容

在这里插入图片描述

  • 首页
    在这里插入图片描述
  • 注册界面
    在这里插入图片描述
  • 随后注册成功和失败都会弹出相应的界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-系统架构师-官方考试指定教程-(11/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

第四十周周报

学习目标&#xff1a; 一、Stable Diffusion 论文 学习时间&#xff1a; 2023.6.3-2023.6.9 学习产出&#xff1a; 一、模型进展 相比前两周的结果&#xff0c;本周改进了一下参数&#xff0c;FID达到了9 前两周结果为10.258 本周相比前两周FID降低1 二、High-Resolu…

数据结构之树与二叉树——算法与数据结构入门笔记(五)

本文是算法与数据结构的学习笔记第五篇&#xff0c;将持续更新&#xff0c;欢迎小伙伴们阅读学习。有不懂的或错误的地方&#xff0c;欢迎交流 引言 前面章节介绍的都是线性存储的数据结构&#xff0c;包括数组、链表、栈、队列。本节带大家学习一种非线性存储的数据结构&…

【MySQL】- 05 sql 语句练习题

sql 语句练习题 一 测试数据的准备二、数据查询1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4、…

MySQL数据库基础 06

第六章 多表查询 1. 一个案例引发的多表连接1.1 案例说明1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解1.3 案例分析与问题解决 2. 多表查询分类讲解分类1&#xff1a;等值连接 vs 非等值连接等值连接非等值连接 分类2&#xff1a;自连接 vs 非自连接分类3&#xff1a…

动态网站开发02:Java Web概述

文章目录 一、 XML基础&#xff08;一&#xff09;XML概述1、XML2、XML与HTML的比较 &#xff08;二&#xff09;XML语法1、XML文档的声明2、XML元素的定义3、XML属性的定义4、XML注释的定义5、XML文件示例 &#xff08;三&#xff09;DTD约束1、什么是XML约束2、什么是DTD约束…

MM32F3273G8P火龙果开发板MindSDK开发教程5 - Gcc编译环境的配置

MM32F3273G8P火龙果开发板MindSDK开发教程5 - Gcc编译环境的配置 1、准备工作 用了几天Keil后&#xff0c;实在用不习惯&#xff0c;只好回到macos系统中来搭建gcc的编译环境。但是百问网火龙果开发板自带的DAP-Link在pyocd中根本识别不到&#xff0c;所以烧录还需要重新购置…

MySQL数据库基础 07

第七章 单行函数 1. 函数的理解1.1 什么是函数1.2 不同DBMS函数的差异1.3 MySQL的内置函数及分类 2. 数值函数2.1 基本函数2.2 角度与弧度互换函数2.3 三角函数2.4 指数与对数2.5 进制间的转换 3. 字符串函数4. 日期和时间函数4.1 获取日期、时间 4.2 日期与时间戳的转换 4.3 获…

一个关于宏定义的问题,我和ChatGPT、NewBing、Google Bard、文心一言 居然全军覆没?

文章目录 一、问题重述二、AI 解题2.1 ChatGPT2.2 NewBing2.3 Google Bard2.4 文心一言2.5 小结 一、问题重述 今天在问答模块回答了一道问题&#xff0c;要睡觉的时候&#xff0c;又去看了一眼&#xff0c;发现回答错了。 问题描述&#xff1a;下面的z的值是多少。 #define…

【Redis】Redis持久化机制RDB与AOF

目录 一、RDB 1、概念 2、RDB文件保存 3、执行RDB 4、触发RDB 5、fork原理 6、RDB的缺点 二、AOF 1、概念 2、开启AOF 3、触发AOF 4、触发重写AOF 三、区别 一、RDB 1、概念 RDB全称为Redis Database Backup File&#xff08;Redis数据备份文件&#xff09;&…

提示工程师指南3-Prompt工程-高级提示

高阶Prompting 到这一步&#xff0c;应该很明显&#xff0c;改进提示有助于在不同任务上获得更好的结果。这就是Prompt工程背后的整个理念。 虽然之前的例子很有趣&#xff0c;但在我们深入了解更高级的概念之前&#xff0c;让我们先正式地介绍一些概念。 文章目录 高阶Promp…

中国机器元宇宙手术机器人市场迎来爆发期,思哲睿能否借势上市?

手术机器人作为一种能够辅助医生进行精准、微创的外科手术的高端医疗设备&#xff0c;近年来受到了国内外医疗界的广泛关注和重视。随着我国人口老龄化、医疗需求增加、医疗技术进步等因素的推动&#xff0c;手术机器人市场规模呈现快速增长态势。 在这样一个充满机遇和挑战的市…

docker部署prometheus+grafana视图监控

效果 一、grafana可视化平台部署 docker run -d \--namegrafana \--restartalways \-p 3000:3000 \grafana/grafanagrafana我也是部署在170.110服务器上&#xff0c;192.168.170.110:3000访问grafana 默认账号密码都是admin 二、部署exportor采集信息 针对各类数据库平台系统…

ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

7. user-Agent破解反爬机制

文章目录 1. 为什么要设置反爬机制2. 服务器如何区分浏览器访问和爬虫访问3. 反爬虫机制4. User-Agent是什么5. 如何查询网页的User-Agent6. user-agent信息解析7. 爬虫程序user-agent和浏览器user-agent的区别8. 代码查看爬虫程序的user-agent9. 在代码中加入请求头信息 1. 为…

wkhtmltopdf踩坑记录

1. 不支持writing-mode。 需求是文字纵向排列&#xff0c;内容从左到右&#xff0c;本来用的是writing-mode: tb-rl;&#xff0c;插件转pdf后发现失效。 解决方法&#xff1a; 让每一列文字单独用一个div容器包裹&#xff0c;对它的宽度进行限制&#xff0c;控制每一行只能出现…

MySQL 搭建数据库表

创建MySQL数据表需要以下信息&#xff1a; 表名表字段名定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法&#xff1a; CREATE TABLE table_name (column_name column_type); 复制 以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl&#xff1a; CREATE …

2023第十六届“认证杯”数学建模网络挑战赛第一阶段比赛经历分享

个人名片&#xff1a; &#x1f405;作者简介&#xff1a;一名大二在校生&#xff0c;热爱生活&#xff0c;爱好敲码&#xff01; \ &#x1f485;个人主页 &#x1f947;&#xff1a;holy-wangle ➡系列内容&#xff1a; &#x1f5bc;️ tkinter前端窗口界面创建与优化 &…

【C++】特殊类

目录 前言 一、设计一个类&#xff0c;不能被拷贝 C98方法 C11方法 二、设计一个类&#xff0c;只能在堆上创建对象 方法一 方法二 三、设计一个类&#xff0c;只能在栈上创建对象 方法一 方法二 四、设计一个类&#xff0c;不能被继承 C98方式 C11方法 五、设计…

darknet yolo标注、训练详细说明

文章目录 1、标注数据1.1、标注1.2、生成训练列表文件train.txt1.3、转换数据标注格式 2、训练数据整理2.1、修改train.txt路径2.2、修改yolov3.cfg2.3、obj.name和obj.data2.4、训练脚本文件trian.sh2.5、测试脚本文件test.sh 3、训练 本文对应的脚本文件和程序下载链接 darke…