SpringBoot+JSP超市管理系统:从部署到实战改造完整指南

发布时间:2026/10/15 15:28:15
SpringBoot+JSP超市管理系统:从部署到实战改造完整指南 简介这是一套面向Java初学者的SpringBootJSP超市管理系统完整工程配套数据库脚本主打通俗易懂、注释丰富适合自学或课程设计参考。资源包为RAR压缩包约1.08MB共491个文件包含28个Java源码、20个JSP页面、93个XML配置、46个JavaScript脚本、10个CSS样式以及SQL数据库脚本和PNG/JPG/GIF图片素材工程结构完整可在IDEA中直接导入或配置运行。项目围绕商品管理、库存管理、销售与订单等典型超市业务展开演示了SpringBoot与JSP如何协同完成前后端交互并包含数据库连接、增删改查、异常处理与日志记录等完整代码。已有568人学习下载对想系统了解SpringBoot整合JSP开发流程、数据库设计和MVC分层的初学者来说是一份上手成本低、可运行可修改的实战参考资料。1. 这个 SpringBoot JSP 超市管理系统到底好在哪一个带数据库脚本的 SpringBoot JSP 超市管理系统是小白自学时难得的“完整闭环”范本。它不是那种只有几个页面拼凑的 Demo而是把登录、商品、进货、销售、会员这些超市日常业务串起来的可运行项目解压后导入数据库、改个连接串就能启动。对刚从 SSM 或 Servlet 过渡到 SpringBoot 的初学者来说最大的价值在于你能看明白一个真实项目如何分层、如何把 JSP 页面数据回显、如何在 Controller 里处理请求而不是只会在练习册上写 CRUD。适合刚学完 SpringBoot 基础、想找一个“带页面带数据库”的整包练手的人也适合想快速上手做课程设计的学生。2. 技术栈与项目结构先看清这个系统由哪几块拼成2.1 SpringBoot 与 JSP 的搭配方式很多自学 SpringBoot 的人默认用 Thymeleaf但国内老项目以及课程设计里JSP 仍然占有很大比例。这个系统就是把 SpringBoot 和 JSP 结合起来SpringBoot 负责后端路由和业务逻辑JSP 负责前端页面渲染MySQL 存储数据。SpringBoot 集成 JSP 有两个关键点一个是spring-boot-starter-tomcat必须把 scope 设为provided另一个是spring.mvc.view.prefix和suffix要指向/WEB-INF/views/目录。如果你之前用 Thymeleaf 写过页面再切到 JSP 会出现一个明显反差——JSP 可以直接在 HTML 里嵌 Java 代码片段虽然风格老但对小白更直观。典型的 pom.xml 依赖长这样dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.apache.tomcat.embed/groupId artifactIdtomcat-embed-jasper/artifactId scopeprovided/scope /dependency dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId version1.2/version /dependency第一个依赖是 SpringBoot Web 基础包第二个tomcat-embed-jasper是让 SpringBoot 内嵌 Tomcat 支持 JSP 编译的关键加上provided是为了防止和外部 Tomcat 冲突第三个 JSTL 用来在 JSP 页面里做循环、判断和格式化没有它你页面上的c:forEach全都会报错。配套的 application.properties 里最核心的三行配置是spring.datasource.urljdbc:mysql://localhost:3306/supermarket?useUnicodetruecharacterEncodingutf8 spring.datasource.usernameroot spring.datasource.password123456 spring.mvc.view.prefix/WEB-INF/views/ spring.mvc.view.suffix.jsp前三条是数据库连接信息最后两条是视图解析器配置。要注意spring.mvc.view.prefix是从src/main/webapp根目录开始的所以你的 JSP 一定要放在src/main/webapp/WEB-INF/views/下面放错位置就会找不到页面报 404。2.2 数据库表与项目目录的对应关系这个系统自带 SQL 脚本导入数据库后会生成若干张核心表。从设计角度看它的表结构并不复杂但彼此之间有外键关联可以让你看到真实业务中的表关系长什么样。常见的基础表包括用户表管理员登录、商品表、供应商表、进货表、销售表、会员表。我拿到这类项目第一件事不是急着跑起来而是先把 SQL 脚本打开扫一遍确认每张表的主键和关联字段。下面是一份简化的商品表结构CREATE TABLE goods ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL COMMENT 商品名称, price decimal(10,2) DEFAULT NULL COMMENT 零售价, stock int(11) DEFAULT 0 COMMENT 库存数量, supplier_id int(11) DEFAULT NULL COMMENT 供应商ID, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;从这张表能读出好几个信息price用decimal(10,2)而不是double是为了避免浮点数精度误差stock是整数代表当前库存supplier_id是外键指向供应商表。实际项目里进货、销售记录表都会通过这个商品 ID 关联这样你才能统计“某个商品卖了多少钱、还剩多少货”。项目目录结构也遵循经典的 SpringBoot 分层controller、service、mapper或dao、entity或pojo另外还有一个config包放拦截器或登录检查。JSP 页面放在webapp/WEB-INF/views下按模块分成goods、user、sale等子目录。你去看这个项目时先把 Controller 与页面文件名对照着打开就能快速理解每个功能点从前端到数据库的完整链路。2.3 核心功能模块商品、进货、销售、会员整个系统不是花架子它实现了超市日常经营中最核心的几条链路。第一个是商品管理包括商品的新增、编辑、删除、按名称搜索这是所有管理系统的基础 CRUD。第二个是进货管理操作员录入进货单后库存数量会跟着增加这里你能学到事务控制的实际意义——如果库存更新失败进货记录也不能留下来。第三个是销售管理每销售一件商品库存数量要扣减同时生成销售记录这里还会涉及到销售总金额的计算。第四个是会员管理提供会员信息的增删改查部分版本还带有简单的积分累加。为了让你看清楚这条链路我把 Controller 里一个典型的“新增商品”方法抽出来讲Controller RequestMapping(/goods) public class GoodsController { Autowired private GoodsMapper goodsMapper; PostMapping(/add) public String add(Goods goods, RedirectAttributes attributes) { int count goodsMapper.insert(goods); if (count 0) { attributes.addFlashAttribute(msg, 添加成功); } else { attributes.addFlashAttribute(msg, 添加失败); } return redirect:/goods/list; } }这个方法算得上这类项目的标准写法接收表单对象Goods直接调用goodsMapper把数据插入数据库然后用重定向跳回列表页。注意它的返回值不是 JSON 也不是ResponseBody而是字符串redirect:/goods/list这是 Spring MVC 中非常经典的 PRG 模式Post/Redirect/Get目的是防止用户刷新页面时重复提交表单。小白在练手时很容易忽略这个细节直接return goods/list结果每次按 F5 就会重新插入一条数据。3. 从零跑起来环境准备与部署步骤3.1 环境清单JDK、Maven、MySQL、IDEA如果你是第一次接触这种完整项目建议先把环境版本确认好避免启动时被各种版本兼容问题搞得头大。我实际跑这个系统时用的是 JDK 1.8 Maven 3.6 MySQL 5.7 IDEA。SpringBoot 版本一般是 2.x不要一上来就上 SpringBoot 3因为 3 要求 JDK 17很多老项目的代码和依赖包不一定兼容。你可以在项目的pom.xml里看到 SpringBoot 父版本如果它写的 2.x那就老老实实用 JDK 8。MySQL 的选择也有一点讲究。这个系统里的 SQL 脚本大概率是用 MySQL 5.7 环境导出的如果你的电脑装的是 MySQL 8.x导入时可能会遇到字符集或认证插件问题。解决办法有两个要么把数据库用户密码改成兼容模式要么在连接串里加上useSSLfalseserverTimezoneAsia/Shanghai。我一般建议小白直接装 MySQL 5.7因为这类自学项目的 SQL 脚本基本都是在 5.7 下写的踩坑概率最小。3.2 导入项目与修改数据库配置拿到项目压缩包后不要直接双击打开 Java 文件而是用 IDEA 新建一个空项目或直接 Import。我平时习惯用File - New - Project from Existing Sources选择解压后的目录然后让 IDEA 自动识别为 Maven 项目。等待右下角 Maven 导入完成后最重要的就是把application.properties里的数据库用户名和密码改成你自己的。这里有一个非常容易翻车的点数据库密码里如果有特殊字符比如、#、?直接写在配置里可能导致连接失败。例如密码是abc123在spring.datasource.password里就要写成abc123但如果用 YAML 格式可能被解析成特殊含义。这个系统用的是 properties 文件所以一般不会出大问题但还是建议你先把密码改成纯数字字母的组合等跑通了再改回去。改完配置后用 IDEA 右侧 Maven 面板执行clean和install看是否编译通过。如果 Maven 下载依赖很慢记得检查是不是忘了配置阿里云镜像。我一般在settings.xml的mirrors节点加上mirror idaliyunmaven/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror这段配置会把中央仓库替换成阿里云镜像Maven 下载 jar 包的速度能从几分钟提高到十几秒。注意mirrorOf要写成central不能写*否则会把一些本地特有的仓库也拦截掉。3.3 启动项目与验证登录以上步骤完成后直接运行启动类Application.java的main方法。当控制台出现 “Tomcat started on port(s): 8080” 时说明项目已经跑起来了。这时候打开浏览器访问http://localhost:8080通常会跳转到登录页面。默认管理员账号密码一般写在 SQL 脚本的user表里比如admin / admin或者root / 123456建议你提前查一下 SQL 脚本不要盲猜。为了更稳地验证项目是否正常工作我习惯先做一个“手动冒烟测试”登录成功后进入商品列表页新增一条测试商品再去数据库里用select * from goods看看这条记录是否插入成功。如果页面提示成功但数据库里没有问题大概率出在事务没有提交或者数据源连到了别的库。如果数据库里有记录但页面列表刷不出来问题就出在 JSP 的数据遍历上检查 Controller 里是否把ListGoods放到了 Model 里以及 JSP 的items属性是否写对。// 商品列表查询 RequestMapping(/list) public String list(Model model) { ListGoods goodsList goodsMapper.findAll(); model.addAttribute(goodsList, goodsList); return goods/list; }这是列表页最常见的写法Model对象里放一个goodsListJSP 页面用 JSTL 的c:forEach遍历时items要写成${goodsList}遍历每一项的变量名随意但注意不要与项目中的保留变量冲突。如果页面上什么都没有先看看控制台有没有报错再确认goodsMapper.findAll()有没有执行到。4. 避坑指南小白最容易踩的五个坑4.1 数据库连接失败时区与 SSL 问题现象启动项目后页面上报“Cannot create PoolableConnectionFactory”或者“Public Key Retrieval is not allowed”。原因MySQL 8.x 默认时区与连接串不一致且服务端要求 SSL 验证。解决在application.properties的数据库连接串后面加上useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/Shanghai完整写法如下spring.datasource.urljdbc:mysql://localhost:3306/supermarket?useUnicodetruecharacterEncodingutf8useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue这个参数很容易被忽略但 MySQL 8 如果没开它会直接拒绝连接。如果你用的是 MySQL 5.7通常只需要加useSSLfalse其他参数不加也没关系。4.2 JSP 页面找不到404 或 Whitelabel Error Page现象访问页面时没有跳到对应的 JSP而是显示 SpringBoot 默认的错误页面或者控制台提示“Error resolving template”。原因视图解析器前缀或后缀配置错误或者 JSP 文件没有放到src/main/webapp/WEB-INF/views/目录下。解决先确认pom.xml里有没有tomcat-embed-jasper依赖再确认application.properties里spring.mvc.view.prefix/WEB-INF/views/是否写对。如果目录结构没错但依然 404看看项目展开后webapp目录有没有被 IDEA 识别为资源目录可以在project structure里手动加一个Web Resource Directory。4.3 表单提交后乱码中文变成问号现象新增商品名称是“苹果”数据库里存的是“”或者“苹果”变成乱码。原因项目里使用 JSP 页面默认编码是 ISO-8859-1而浏览器提交的数据是 UTF-8两层编码不一致。解决在所有 JSP 文件第一行写上% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%同时保证数据库表默认字符集是 utf8并在连接串里加上characterEncodingutf8。这个坑几乎每个用 JSP 的 SpringBoot 项目都会遇到不要只改一处。4.4 启动报错端口占用或 Bean 注入失败现象启动时控制台报“Port 8080 was already in use”或者出现No qualifying bean of type xxxMapper。原因端口被其他程序占用Mapper接口没有添加Mapper注解或者启动类上没有加MapperScan。解决端口占用可以在application.properties里改端口比如server.port8888Mapper 注入失败后在启动类上追加MapperScan(你的mapper包路径)或者给每个 Mapper 接口加上Mapper。这类项目里一般会写一个MybatisConfig或直接在主启动类上标注MapperScan你只需要确认路径是否和你的包名一致。4.5 刷新页面重复提交数据现象点击“新增商品”提交后按 F5 发现数据库里反复出现多条一模一样的数据。原因Controller 返回的是goods/list请求转发而不是重定向刷新时会重新执行 POST 请求。解决所有涉及新增、修改、删除的操作返回字符串都要用redirect:/xxx/list这种重定向方式。这也是 JSP 时代积累下来的经典经验不要在 Controller 里直接返回页面名称除非你确认这个操作不需要防重复提交。5. 进阶实战把这个系统变成你自己的练习场当你把这个超市管理系统完整跑通、所有按钮都点过一遍之后就算真正迈过了“看得懂”的门槛。下一步我建议你别急着换下一个项目而是围绕这个小系统做三个方向的改造每个都能让你对 SpringBoot 的理解深一截。第一个方向是给系统加上“操作权限”。目前系统里只有一种管理员角色你可以去 user 表加一个role字段然后写一个 Spring 拦截器在进入商品管理模块之前判断当前登录用户的角色。拦截器实现非常简单继承HandlerInterceptor在preHandle方法里从 session 取出用户如果权限不足就跳到一个提示页面。这样做的好处是你等于亲手实现了“认证 授权”的完整链路。第二个方向是改造分页。原版大概率没有做分页商品一多列表就会变得很长。你可以引入 PageHelper 依赖或者在goodsMapper.xml里手写limit语句每次只查 10 条然后在前端页面加上“上一页 / 下一页”按钮。这个改造能让你接触到 MyBatis 的动态 SQL 和前端传参比单纯看教程有用得多。第三个方向是整理一份自己的“坑清单”。我当年从这个项目踩过的坑包括编码、时区、重定向、JSP 目录位置几乎后来找工作面试时都被问到过。建议你每次排查完一个问题就把它按“现象—原因—解决”三条写进一个 Markdown 文件里附带你当时的错误截图这样积累一个月你的知识库会比很多培训机构的笔记更扎实。我一般拆完这种项目都会强制自己做一次“反向变量命名”把 Controller 里的GoodsController改名成ProductController然后把相关的goods全部替换成product包括数据库表名、JSP 文件名、接口路径。做完这一步你会发现自己对项目的依赖关系有了肌肉记忆因为所有需要改的地方都是一根根牵出来的线。这也是我为什么一直觉得对小白最友好的学习路径不是看十个视频而是把一个完整的系统拆开、弄懂、再亲手改装一遍。希望这个过程能帮你把这套代码吃透后面的路会越走越顺。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询