当前位置: 首页 > news >正文

二维码签到系统

一、项目简介

本次开发一套基于 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 版本、数据库驱动版本要对应,避免兼容性崩溃。
http://www.cnnetsun.cn/news/3025988.html

相关文章:

  • 40岁重新学工具,AI给了我第二次职业选择
  • 视频孪生全域穿透 营区物理空间动态数字映射综合平台
  • JVM篇-JVM主要组成部分
  • 2026打工人必看:这些看似正常的文件,可能是木马的入口
  • 在POSIX线程中正确处理无参数函数
  • 我终于知道,Codex 为什么需要一块无限画布了
  • CSS Flexbox布局的精妙应用
  • 解决django.db.utils.OperationalError: attempt to write a readonly database错误
  • 如何快速上手SDR++:跨平台软件定义无线电的终极解决方案
  • 《多级标签并行筛选》一、Flex弹性布局使用指南
  • 全栈 API 设计与 GraphQL 实践:从 N+1 查询到 DataLoader 优化的工程化方案
  • 数据结构(六)
  • Loop 工程:从 prompter 到 loop 设计师 [翻译]
  • 2026命理软件做批量检索怎么选?八字排盘App要看标签体系和条件筛选
  • Windows热键神秘失踪案:Hotkey Detective一键破案的神奇体验
  • Kali Linux下Nikto Web扫描器实战:从原理到自动化安全评估
  • 加密算法实战指南:从对称/非对称原理到混合系统设计与密钥管理
  • LinkSwift:一键解锁九大网盘下载限速的免费解决方案
  • 告别重复操作:鸣潮自动化工具如何解放你的游戏时间
  • 【Springboot毕设全套源码+文档】基于SpringBoot的智能家居管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 热粘塑性材料参数识别与高效仿真:非负矩拟合与hp-FCM方法实践
  • 突破Mac文件系统壁垒:开源NTFS读写解决方案深度指南
  • JPEXS FFDec终极指南:5步掌握Flash逆向工程免费工具
  • Olist电商数据分析实战:从数据清洗到商业洞察全流程解析
  • Navicat Premium Mac无限试用终极指南:告别14天限制的完整解决方案
  • 单节点跑业务稳如泰山 扩容高可用集群反而频繁卡死 复盘完整连接交互揪出深层根因
  • 非均匀Navier-Stokes方程:密度斑块下的渐近行为与正则性分析
  • Boss直聘批量投递工具:如何用技术突破求职效率瓶颈
  • 为什么说要“买在一致”
  • 如何在Windows上免费享受Spotify Premium无广告体验完整指南