首页 / 资讯中心 / 文章详情

电影院购票系统JavaWeb部署笔记:JDK1.8+Tomcat8+MySQL5.7避坑指南

电影院购票系统JavaWeb部署笔记:JDK1.8+Tomcat8+MySQL5.7避坑指南 ★ FEATURED ARTICLE
简介一套电影院购票系统完整源码附带数据库脚本面向Java Web初学者、毕业设计学生以及需要快速落地影院管理项目的开发者。项目围绕购票流程进行了功能分析与概要设计采用MVC分层架构将模型、视图与控制逻辑分离既可通过SSM或SpringBoot等主流框架整合运行也能基于Servlet和Filter自行封装体现了高内聚低耦合的软件设计思想。压缩包共970个文件约18.43MB主要涵盖Java源码、JSP页面、Servlet与Filter、XML及properties配置、MySQL数据库脚本以及layui、bootstrap、jQuery等前端资源可直接导入Eclipse或IntelliJ IDEA构建调试。已有2794人学习下载可重点参考影片排片、在线选座、订单管理、会员管理等模块的设计实现。借助这套源码能够快速梳理Java Web项目目录结构、理解MVC职责划分与SSM整合方式数据库脚本和配置文件齐全搭建环境后即可运行验证适合课程设计、毕业设计及日常练手。1. 装这套电影院购票系统之前先弄清版本这件事做 Java Web 开发的人应该都有印象网上流传着一批带源码和数据库 SQL 的课程设计、毕业设计项目电影院购票系统就是最常见的样本之一。这套系统技术栈很典型——前端是 JSP、Layui、Bootstrap、jQuery后端是 Servlet、Filter、Spring、Hibernate、MyBatis 混搭采用 MVC 架构把业务逻辑和页面展示拆开。单看技术选型不算新但胜在结构完整买票、排片、订单管理这些模块都齐全特别适合正在学 Java Web 或者想快速搭一个可演示项目的人。我帮别人装这套系统时最常遇见的坑反而不是代码本身而是环境版本对不上。比如代码里写的是 JDK 1.7/1.8你偏用 JDK 11 编译数据库写成 MySQL 5.6/5.7你装了 MySQL 8 却没换驱动启动时直接报通讯链路异常。所以这篇笔记我按自己的安装顺序来写先列清环境版本再一步步把项目导入、配库、启动、验证跑通最后把那些我踩过的坑一条条摆出来。照着走你不需要动代码逻辑就能把这个 java 源码项目跑起来。2. 环境准备JDK 1.8 配 Tomcat 8别再问能不能用更新版这套电影院购票系统是典型的 JavaWeb 老项目源码里大量使用 JSP、Servlet、Filter还有一些依赖库是基于 JDK 8 编译的。我建议你不要尝试用 JDK 11 或 17 直接跑否则会遇到模块访问限制、JAXB 缺失这类问题。不是说新版不行而是你为省十分钟装新版后面可能花一小时处理兼容性。2.1 JDK 1.8 下载与安装路径别带空格先装 JDK 1.8。下载时注意选jdk-8u202或更早版本因为 203 开始 Oracle 改了许可协议某些企业环境会有验证问题。个人开发的话 8u202 就够了。安装时有个细节默认安装路径在C:\Program Files\Java\jdk1.8.0_202这个路径本身没问题但你后续配置环境变量时容易漏掉空格。我习惯把 JDK 装到D:\Java\jdk1.8.0_202避免空格引起的一些脚本解析问题。装完后手动配JAVA_HOMEJAVA_HOMED:\Java\jdk1.8.0_202 PATH%JAVA_HOME%\bin;%PATH%配完后打开命令行执行java -version看到java version 1.8.0_202才算通过。如果显示java 不是内部或外部命令十有八九是 PATH 没生效重新打开一个命令行窗口再试别在旧窗口里纠结。2.2 安装 MySQL 5.7为什么不用 8.0项目摘要里写明数据库建议用 MySQL 5.6 或 5.7。我推荐 5.7因为 5.6 太老而 5.7 在性能、字符集支持上都更成熟。如果你坚持用 MySQL 8需要把驱动从com.mysql.jdbc.Driver改成com.mysql.cj.jdbc.Driver还得在连接 URL 上加serverTimezoneAsia/Shanghai这一改对新手来说很容易漏。MySQL 5.7 安装时建议选择 ZIP 包而不是安装向导这样方便查看配置。下载mysql-5.7.36-winx64.zip解压到D:\MySQL\mysql-5.7.36然后新建my.ini[mysqld] basedirD:/MySQL/mysql-5.7.36 datadirD:/MySQL/mysql-5.7.36/data port3306 character-set-serverutf8mb4初始化数据目录时以管理员身份运行命令行进入bin目录mysqld --initialize-insecure net start mysql--initialize-insecure会生成一个空密码的 root 账号方便第一次登录。之后用mysql -u root进入再修改密码。这里要注意datadir目录必须存在否则初始化报错提前建好data文件夹。2.3 Tomcat 8.5 与 IDE 选择项目是 JSP Servlet 架构必须用 Servlet 容器Tomcat 8.5 和 JDK 1.8 配合最稳定。下载apache-tomcat-8.5.100解压到D:\Tomcat\apache-tomcat-8.5.100别放中文路径或带空格路径。IDE 方面Eclipse EE 或 IntelliJ IDEA 都可以。我用的是 IDEA因为导入项目时它对各种目录结构的容忍度更高。注意IDEA 里需要把 Project SDK 指向 JDK 1.8语言级别也选 8否则编译时会报错。Eclipse 则要确保在Window - Preferences - Java Compiler里把 Compiler compliance level 设为 1.8。3. 导入项目与配置依赖从压缩包到能跑的工程拿到电影院购票系统源码数据库sql.rar后先解压。里面通常包含源码文件夹、数据库 SQL 文件、以及一个说明文档。不要直接用 IDEA 打开整个文件夹因为源码目录可能不是 Maven 标准结构而是一堆 WebContent 或 src 目录。3.1 解压与目录结构识别解压后先看一眼目录。典型结构是src/ com. controller/ service/ dao/ entity/ filter/ WebContent/ 或 webapp/ static/ WEB-INF/ web.xml index.jsp sql/ cinema.sql这个项目是 Servlet JSP 为核心的 MVC 工程没有 Maven 的pom.xml所以你在 IDEA 里要选择Web类型项目创建然后把源码目录拷贝进去。我一般这样做新建一个空项目选 Java Enterprise不要勾选 Maven。把解压出的src目录复制到项目根目录。把WebContent或webapp目录作为 Web 资源目录在Project Structure - Modules - Web里把Web Resource Directory指向它。把WEB-INF\lib下的所有 JAR 包添加到项目依赖里。如果源码里没有WEB-INF\lib你需要手动添加以下常见依赖servlet-api.jar、jsp-api.jar、jstl.jar、mysql-connector-java-5.1.49.jar、spring-webmvc如果用了 Spring MVC。由于项目依赖了layui、bootstrap、jquery这些前端库它们通常在WebContent/static或js目录下不需要额外下载。3.2 在 IDEA 里配置 Artifact 和 Tomcat导入后最关键一步是配置项目部署。在 IDEA 的Run/Debug Configurations里点选择 Tomcat Server - LocalApplication server 选 Tomcat 8.5HTTP port 填 8080在 Deployment 标签页点选Artifact选择xxx:war explodedApplication context 填/cinema后续访问路径就是http://localhost:8080/cinema为什么用war exploded而不是war因为 JSP 页面在开发阶段需要实时修改生效exploded 模式把编译后的目录直接暴露给 Tomcat改完 JSP 刷新就能看到省去重新构建的等待。Eclipse 里则是在 Servers 视图里右键 Tomcat选择Add and Remove...把项目添加进去。3.3 检查 JAR 包冲突Spring 与 Hibernate 的版本匹配这个项目可能同时依赖 Spring 和 Hibernate或者 Spring 和 MyBatis。我遇到过一次 Hibernate 5.x 和 Spring 4.x 混用导致创建 SessionFactory 失败的问题。原因很经典Spring 的org.springframework.orm.hibernate5.LocalSessionFactoryBean只能用于 Hibernate 5如果项目里是 Hibernate 4 却引用了 5 的包方法签名对不上容器启动直接抛BeanCreationException。检查方式在WEB-INF/lib或pom.xml如果有里看是否有多个spring-*.jar版本混在一起。如果既有 4.3 又有 5.2 的包只保留一个。通常这种老项目用 Spring 4.3 Hibernate 4.3 或 MyBatis 3.4 是安全的。改完依赖后记得重新构建避免 Tomcat 缓存旧的 class。3.4 修改数据库连接配置文件项目里数据库连接一般写在jdbc.properties或db.properties也可能直接写死在applicationContext.xml里。找到它改成你自己的环境jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/cinema?useUnicodetruecharacterEncodingutf8useSSLfalse jdbc.usernameroot jdbc.password123456这里驱动类必须用com.mysql.jdbc.Driver这是 MySQL 5.7 对应驱动的写法。连接 URL 里characterEncodingutf8是为了保证 JSP 页面插入数据库的中文不会乱码。不要把useSSLfalse去掉否则某些 MySQL 5.7 默认配置下连接时会警告甚至失败。4. 数据库初始化把 SQL 文件变成能用的库这一步是真正的痛点。许多初学者把.sql文件直接导入工具却因版本、字符集、表结构顺序问题导致导入失败。我会用一个稳妥的顺序来操作。4.1 创建数据库并核对字符集先登录 MySQL用命令创建数据库而不是在工具里直接导入CREATE DATABASE cinema DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE cinema; SOURCE D:/cinema.sql;用utf8mb4而不是utf8是因为如果购票系统里要存 Emoji 或特殊符号utf8的 3 字节上限会报Incorrect string value。执行SOURCE之前检查 SQL 文件开头是否包含CREATE DATABASE语句。如果有你可能会看到重复建库的报错但通常不影响后续数据导入。只是要注意如果原文件里是utf8而你建的库是utf8mb4表字段会自动兼容不会报错。4.2 处理导入时报错SQL 文件里有旧版语法常见现象是导入到一半报Unknown column ... in field list或Duplicate entry。前者说明 SQL 文件里引用了不存在的列很可能是原项目用了更高版本 MySQL 生成但当前表结构不匹配后者是重复主键通常因为重复执行了导入。我的处理方式先检查 SQL 文件里是否包含DROP TABLE IF EXISTS语句如果没有导入前先手动清空旧表。直接运行DROP DATABASE cinema; CREATE DATABASE cinema DEFAULT CHARACTER SET utf8mb4; USE cinema; SOURCE D:/cinema.sql;如果担心数据被删可以提前把数据库导出备份mysqldump -u root -p cinema cinema_backup.sql。这种操作的后悔药就是备份多花 30 秒能省很多事。4.3 验证数据完整性导入完成后执行几条查询SHOW TABLES; SELECT COUNT(*) FROM movie; SELECT * FROM user LIMIT 1;如果movie表里有影片数据、user表里有账号说明 SQL 导入基本成功。如果某张表为空单独看那张表的建表语句和插入语句可能是导入了备份但没导数据。我遇到过系统能跑但首页影片列表空白的情况十有八九是 SQL 文件里把插入语句放在事务里中途报错回滚了导致表建了但数据没进。4.4 数据库连接验收命令行测通才算通在启动 Tomcat 前先用命令行测一下连接mysql -u root -p123456 -h 127.0.0.1 -P 3306 -e USE cinema; SELECT 1;能返回1说明账号权限、端口、密码都没问题。如果这一步失败后面的项目启动必定报连接异常。特别检查MySQL 是否监听在 3306 端口是否因为本机之前装过 MySQL 8 残留了服务导致 3306 被占用。可以在services.msc里停掉所有带 MySQL 字样的服务只留 5.7 的实例。5. 部署避坑启动报错逐条排查这一章全是血泪经验。系统代码本身没问题但环境差异导致的各种报错能把人折腾到怀疑人生。我按出现频率整理几条每条先写现象再说原因和解决。5.1 现象Tomcat 启动闪退日志在logs\catalina.out里显示内存不足原因多数是 JVM 参数没配置Tomcat 默认堆内存 256MB项目里 JSP 和前端资源多编译时会抛java.lang.OutOfMemoryError: PermGen space。解决在 IDEA 的 Tomcat 配置里加 VM options:-Xms512m -Xmx1024m -XX:MaxPermSize256m如果是在命令行部署编辑catalina.bat里的JAVA_OPTS。注意 JDK 1.8 没有 PermGen这把参数改成-XX:MetaspaceSize256m虽然 JDK 8 不再报 PermGen但很多老项目还在用 maxPerm加了无害。5.2 现象页面中文都是问号或乱码原因有三层数据库连接 URL 缺characterEncodingutf8、JSP 页面没有指定编码、MySQL 库表字符集不是 utf8。解决步骤修改jdbc.properties的 URL确保characterEncodingutf8写在最后。检查 JSP 文件头部是否有% page contentTypetext/html;charsetUTF-8 pageEncodingUTF-8%没有就统一加上。在web.xml里配一个过滤器强制所有请求和响应用 UTF-8filter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param /filter注意这个过滤器要放在其他 Filter 之前因为它需要先设置 request 字符集后续参数解析才正确。5.3 现象启动报ClassNotFoundException: com.mysql.jdbc.Driver原因非常直白驱动包没加到WEB-INF/lib或者加错了版本。MySQL 8 的驱动类名变成了com.mysql.cj.jdbc.Driver如果你下载的是新版驱动却沿用旧代码里的com.mysql.jdbc.Driver一样找不到。解决如果你是 MySQL 5.7下载mysql-connector-java-5.1.49.jar放到项目的WEB-INF/lib下并在 IDEA 的 Module Dependencies 里确认它已经被引入。如果你用 MySQL 8把配置里的驱动改成jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/cinema?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalse注意serverTimezone必须加否则 MySQL 8 会报 CST 时区错误。5.4 现象启动时Unable to load authentication plugin caching_sha2_password我用 MySQL 8 跑老项目时遇到过一次。MySQL 8 默认认证插件与 MySQL 5.7 不同老驱动不支持。如果你非要用 8除了换驱动还得执行 SQL 把 root 的认证方式改回来ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123456;但我的建议是别折腾直接换成 MySQL 5.7省事。5.5 现象访问页面时 404控制台没有任何异常这种是最让人郁闷的。Tomcat 启动了项目也部署了但访问/cinema/login.jsp报 404。原因通常是把项目部署根路径配错了。检查 IDEA 的 Deployment 里 Application context 是不是/cinema。如果不是改成/cinema重启 Tomcat。另外检查 web.xml 里的 welcome-file 是否指向了实际存在的文件。有些项目把默认页放在index.jsp但路径写成login/index.jsp导致找不到。还有一个隐蔽问题项目的 JSP 文件放在WebContent/jsp下但 filter 拦截了所有/jsp/*请求并跳转路径对不上就会 404。打开浏览器的 Network 面板看具体请求 URL用实际返回 200 的路径来核对跳转逻辑。6. 装完怎么验证从登录到买票一条龙走通系统跑起来后别急着说完成一定要做一次完整的功能验证。我的习惯是启动后先看控制台日志有没有红色 ERROR等 Tomcat 输出Server startup in [xxx] milliseconds再开浏览器。6.1 基础验证首页、登录、注册访问http://localhost:8080/cinema如果首页能正常展示影片列表说明数据库连接初步通过。然后试登录查看数据库里已有的用户表数据SELECT username, password FROM user WHERE is_admin 1;用管理员账号登录后台普通用户账号登录前台。如果登录后能跳转到对应页面说明 Servlet 与 JSP 交互正常。6.2 核心流程购票订单链路验证要完整我一般走一遍选影片 - 选场次 - 选择座位 - 下订单 - 支付一般模拟 - 查看订单。每一步都关注浏览器地址栏和数据库变化。比如下单后执行SELECT order_id, status, create_time FROM orders ORDER BY create_time DESC LIMIT 3;能查到新插入的数据订单状态字段符合预期才算真正通。如果点购票后跳回了首页多半是movie表里没有场次信息需要检查movie_session或类似表是否有数据。6.3 接口与日志验证技巧看日志时别只看异常把日志级别调到DEBUG观察 SQL 打印。项目里如果用了 Hibernate在hibernate.cfg.xml里设置property nameshow_sqltrue/property property nameformat_sqltrue/property这样每次访问页面控制台会输出实际执行的 SQL。如果点击某个按钮后没有任何 SQL 输出说明前端请求根本没到达后端用浏览器开发者工具看有没有 404 或 500再定位是 JSP 路径还是 Servlet 映射问题。6.4 一套聪明人都会用的检查命令最后分享一个我的习惯验证完功能后把 MySQL 的慢查询日志打开一会儿看看有没有大批量全表扫描。虽然对小项目没必要但能帮你发现哪里没走索引。开启方式是SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2;然后在业务高峰期正常操作几分钟再查mysql.slow_log表。如果发现某条 SQL 执行时间很长多半是因为表没建索引。这个检查不会影响运行但能让你对项目的性能底细有数。从那以后我每次部署完都会强制自己把核心流程走一遍比看十遍日志都管用。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站