news 2026/7/6 6:42:59

二维码签到系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二维码签到系统

一、项目简介

本次开发一套基于 Servlet+JSP+MySQL+ZXing 二维码工具的课堂签到系统,分为教师端、学生端两大模块。 教师功能:创建班级、输入班级 ID 生成签到二维码、查看所有签到记录; 学生功能:扫描二维码跳转签到页面,填写学号姓名完成签到; 技术栈:Eclipse、Tomcat9、MySQL8、ZXing3.5.3、JDBC。

二、环境搭建步骤

1. 项目结构搭建

采用 Maven 式 Web 项目分层:

  1. com.scut.signin.servlet:Servlet 控制器(TeacherServlet、StudentSignServlet)
  2. com.scut.signin.util:工具类(数据库工具 DBUtil、二维码生成 QRCodeUtil)
  3. Web 页面分层:teacher 教师页面、student 学生页面、公共提示页 success.jsp
  4. WEB-INF/lib:存放所有运行依赖 jar 包

2. 依赖包部署(重点踩坑点)

需要导入 3 类 jar:

  1. MySQL 驱动:mysql-connector-j-8.3.0.jar
  2. ZXing 二维码核心包:core-3.5.3.jarjavase-3.5.3.jar

3. Tomcat9 环境配置

  1. 修改端口 8081,避免 8080 端口占用导致启动失败;
  2. 项目 JDK 版本注意:Tomcat9 最高兼容 JDK11,使用 JDK21 会出现启动崩溃;
  3. 每次修改代码后执行两步清理:Project→Clean + Servers 右键 Clean,清除缓存。

三、核心功能代码实现

1. 数据库工具 DBUtil

封装 JDBC 连接,统一获取数据库连接,简化 Servlet 重复代码。

2. 二维码工具 QRCodeUtil

使用 ZXing 生成签到二维码,拼接学生签到地址 + 班级 ID; 易错点:缺失全部 ZXing 包导入,会直接编译报错,需要补齐QRCodeWriter、BitMatrix等全部导包。

3. 教师端 TeacherServlet

单 Servlet 分发多业务:通过 action 区分创建班级、生成二维码、查询签到列表; 表单 POST 提交,必须重写doPost调用doGet,否则报 405 方法不允许。

4. 学生签到 StudentSignServlet

接收表单学号、班级 ID,插入签到记录表;捕获重复签到异常,页面提示签到成功 / 失败。

四、开发全程踩坑与解决方案(博客核心亮点)

坑 1:HTTP 405 方法不允许

报错:此 URL 不支持 Http 方法 POST 原因:JSP 表单使用 post 提交,Servlet 只写了 doGet,没有 doPost 方法 解决:在每个 Servlet 末尾添加 doPost,复用 doGet 逻辑

java

运行

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

坑 2:HTTP 500 内部错误 ClassNotFoundException: QRCodeWriter

报错:运行时找不到 ZXing 二维码类,编译无报错 原因:jar 包只加到编译路径,未放到 WEB-INF/lib,Tomcat 部署不会打包该依赖 解决:

  1. 将 core、javase 两个 jar 放入 WEB-INF/lib;
  2. 项目右键 Properties → Deployment Assembly,添加 jar 包发布规则;
  3. 清理 Tomcat 缓存、项目缓存后重启。

坑 3:Tomcat 启动失败,端口占用

解决:打开 server.xml,修改 Connector 端口从 8080 改为 8081。

坑 4:方法嵌套语法报错

错误:将 doPost 写在 doGet 方法内部,Java 不支持方法嵌套,出现大量红叉 解决:doGet、doPost 平级书写,所有业务代码只放在 doGet 内部。

五、系统演示效果

  1. 教师首页:输入班级名称创建班级,输入班级 ID 一键生成签到二维码;
  2. 二维码页面:展示签到二维码,手机扫码跳转学生签到页;
  3. 学生签到页:填写学号、姓名提交,提示签到成功;
  4. 签到列表:展示该班级所有学生签到时间、学号、姓名。

六、开发总结

  1. Web 项目编译正常、运行报错 90% 都是 jar 包部署问题,优先检查 WEB-INF/lib;
  2. 表单 POST 提交的 Servlet 必须实现 doPost 转发,规避 405 错误;
  3. Tomcat 环境三大清理步骤:Clean 项目、Clean 服务器、重启软件,解决绝大多数缓存异常;
  4. 工具类注意补齐全部导包,缺失类会直接抛出 500 异常;
  5. 版本匹配很重要:Tomcat 版本、JDK 版本、数据库驱动版本要对应,避免兼容性崩溃。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/27 1:46:16

40岁重新学工具,AI给了我第二次职业选择

四年前我36岁,做了十年传统行业的内容工作。公司上了新系统,领导开会说“以后所有文案都要用AI预审”。旁边23岁的同事打开工具、输入指令、生成稿件、完成微调,前后二十分钟。我在旁边看了三分钟,没说话。那天晚上,我…

作者头像 李华
网站建设 2026/6/27 1:41:39

视频孪生全域穿透 营区物理空间动态数字映射综合平台

一、方案总纲本营区全域穿透动态数字映射综合平台由镜像视界浙江科技有限公司全栈源码自主研发,整套视频孪生全域穿透空间演算核心攻关课题纳入国家十四五重点研发课题序列,依托镜像视界浙江普陀时空大数据应用技术联合研究院完成多源时序视觉融合、像素…

作者头像 李华
网站建设 2026/6/27 1:38:28

JVM篇-JVM主要组成部分

JVM主要由类加载子系统,运行时数据区,执行引擎,本地方法接口,,本地库组成1.类加载子系统负责加载、链接和初始化类文件(.class)。类加载过程分为三步:加载:查找并读取字节码文件到内存。链接:验证字节码、分配静态变量…

作者头像 李华
网站建设 2026/6/27 1:36:31

2026打工人必看:这些看似正常的文件,可能是木马的入口

打工人必看:这些看似正常的文件,可能是木马的入口一个你以为只是普通 Excel 的文件,打开后可能已经把整台电脑交给了陌生人。一、先说一个真事 2025年8月,上海浦东一家公司,财务刘女士被拉进一个"工作群"&am…

作者头像 李华
网站建设 2026/6/27 1:34:15

在POSIX线程中正确处理无参数函数

在编写C语言程序时,如果你尝试使用POSIX线程(pthreads)来创建线程,你可能会遇到一些与函数声明和原型相关的警告和错误。下面我们通过一个实例来展示如何正确地处理这些问题,确保代码的兼容性和规范性。 背景介绍 假设我们有一个名为thread_function的函数,它不接受任何…

作者头像 李华
网站建设 2026/6/27 1:26:40

我终于知道,Codex 为什么需要一块无限画布了

写在前面 最近无限画布这个选题挺火。 一开始我其实没有太大感觉。因为“无限画布”这几个字,听起来很容易让人误会成一个更大的白板:能拖拽、能放图、能写标注,仅此而已。 但这几天我真正用 Codex 跑贴图、改图、调整辫子哥哥 IP 之后&#…

作者头像 李华