简介:面向高校教研室场景的Java Web与MySQL管理系统,提供教师信息管理、课程安排、学生档案、教学资源分配等核心业务功能,适用于课程设计、实训教学或毕业设计参考。压缩包共2个文件,包含1个SQL数据库脚本和1个ZIP工程文件,整体大小约10MB;其中SQL脚本涵盖教师、学生、课程等主要数据表的建表语句与初始数据,ZIP内则为完整项目源码、MyEclipse工程配置及部署说明,可在Tomcat+MySQL环境下直接导入运行。目前已有258人学习下载。借助此项目,可以完整走通MySQL建表、DAO层封装、Servlet控制器编写、JSP页面渲染及Tomcat部署的全流程,直观理解Java Web应用从后台逻辑到数据库访问的实现方式。同时,包内附带的云部署相关文件也提供了向GCP等云端迁移的扩展思路,适合希望进一步提升部署能力的开发者继续研究。
1. 一份老派 Java Web 课设源码:先认清价值再决定要不要下载
朋友发来一个压缩包,名字是“基于 Java web+mysql 的教研室管理系统(源码+数据库).zip”,解压一看,MyEclipse 工程目录、JSP 页面、Java 源码、tams.sql 数据库脚本整整齐齐躺在里面。我的第一反应不是“这技术栈太老”,反而是“这项目够干净”。它没有 Spring 全家桶,没有 Maven 依赖迷宫,就是 Servlet + JSP + JDBC + MySQL 直来直去,每一行代码都能从源码里找到对应位置。如果你正处于“学过 Java 基础但还没完整写过一个 Web 系统”的阶段,这种老派项目比那些几十个依赖的 SSM 框架项目更适合当第一份源码来读。它能解决的是教研室日常管理里最基础的增删改查:教师信息、课程安排、学生档案、教学资源分配,外加一个简单的登录鉴权。适合准备 Java Web 课设答辩的学生,适合面试前想拿真实代码练手的人,也适合需要快速搭一个内部管理后台的初级工程师。但先说清楚,它要求 MyEclipse + Tomcat + MySQL 这套老三样环境,别指望双击就能跑。
2. 从 zip 到数据库:先把 tams.sql 里的业务读懂再动手改
拿到任何源码包,我习惯先不急着启动,而是先把解压内容和数据表结构捋一遍。数据库结构就是这个系统的地基,地基没看懂,后面改功能全是靠猜。这章的目的就是让你在点运行按钮之前,先把这套系统的骨架和落库逻辑摸清楚。
2.1 解压后你会看到什么:目录结构背后是哪一套技术栈
解压之后,典型结构是这样几块:WebRoot(或 WebContent)目录下放着 JSP 页面和 WEB-INF,src 目录下是按包划分的 Java 类,根目录里躺着 tams.sql,此外还附了一个名字叫“tams of gcp.zip”的压缩包。原包描述里的“myecplise”显然是作者手误,正确拼写是 MyEclipse,别被这个拼写带偏。
这套系统走的是最传统的 Java Web 分层。JSP 负责页面展示,Servlet 接收浏览器请求并调用业务逻辑,DAO 层用 JDBC 直连 MySQL 做增删改查,web.xml 里手工注册 Servlet 映射。和现在主流的 Spring Boot + MyBatis 相比,它确实是“手动挡”,但手动挡有个不可替代的好处:Servlet 生命周期、request.getParameter 怎么取值、PreparedStatement 怎么防注入,这些问题都能直接指着一行行代码讲清楚。Java 面试题里常问的“Servlet 是单例还是多例”“doGet 和 doPost 区别”,这个项目就是活例子。
我一般会带新人按这个顺序读代码:先看 tams.sql,了解有哪些表和关联关系;再看 web.xml,看 Servlet 映射路径,从而知道一个 URL 会落到哪个类;最后看 DBUtil.java,确认数据库连接信息在哪改。把这三个文件读明白,等于拿到了全系统的地图。
| 解压内容 | 作用 | 优先级 |
|---|---|---|
| tams.sql | 建库建表脚本和初始数据 | 最先读 |
| WEB-INF/web.xml | Servlet 映射、欢迎页、过滤器配置 | 第二读 |
| src/db/DBUtil.java | 数据库连接入口和连接参数 | 第三读 |
| WebRoot 下的 JSP | 页面层,对应各功能模块 | 按需查 |
| tams of gcp.zip | 附加压缩包,名字里的 gcp 容易让人联想到 Google Cloud Platform,但课设落地建议先不管它 | 本地跑通主包再看 |
2.2 逐表拆解 tams.sql:教师、课程、学生与教学任务怎么落库
打开 tams.sql,按这类课设最常见的设计推演,库名是 tams,里面应该有这几张核心表:t_user 存登录账号和密码,用角色字段区分管理员和普通教师;t_teacher 存教师编号、姓名、职称、所属教研室;t_student 存学号、姓名、专业、班级;t_course 存课程号、课程名、学分、学时;t_teach_task 是教学任务表,把教师和课程关联起来;t_resource 存教学资源的标题、路径、上传人。
整库最有技术含量的往往是 t_teach_task 这张“中间表”。一个教师能带多门课,一门课也可能由多位教师共同承担,这是典型的多对多关系,必须靠中间表拆成两个一对多。建表逻辑大致长这样,我从常见课设设计里还原一个等价片段:
CREATE TABLE t_teacher ( teacher_id INT PRIMARY KEY AUTO_INCREMENT, teacher_no VARCHAR(20) NOT NULL UNIQUE, teacher_name VARCHAR(50) NOT NULL, title VARCHAR(20), dept VARCHAR(50) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE t_course ( course_id INT PRIMARY KEY AUTO_INCREMENT, course_no VARCHAR(20) NOT NULL UNIQUE, course_name VARCHAR(100) NOT NULL, credit DECIMAL(3,1), hours INT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE t_teach_task ( task_id INT PRIMARY KEY AUTO_INCREMENT, teacher_id INT NOT NULL, course_id INT NOT NULL, term VARCHAR(20), CONSTRAINT fk_task_teacher FOREIGN KEY (teacher_id) REFERENCES t_teacher(teacher_id), CONSTRAINT fk_task_course FOREIGN KEY (course_id) REFERENCES t_course(course_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;代码逻辑很简单:t_teacher 和 t_course 各自独立主键,t_teach_task 用外键把两者关联起来,term 字段记录是哪个学期的教学任务。说明一下参数取舍:主键用 INT AUTO_INCREMENT,是因为教研室规模撑不起大并发,用自增主键最简单,性能也够;字符集直接落到 utf8mb4,比 utf8 多支持表情符号存储,避免后期为一条 emoji 记录改库。外键约束在课设里建议保留,它能在删除教师时拦住“还有教学任务却先删入教师”的脏数据。
业务上最常用的一条查询,是“查某个老师某个学期带了哪些课”,等价 SQL 长这样:
SELECT c.course_name, c.credit, t.teacher_name, tt.term FROM t_teach_task tt JOIN t_course c ON tt.course_id = c.course_id JOIN t_teacher t ON tt.teacher_id = t.teacher_id WHERE t.teacher_name = '王老师' AND tt.term = '2024-2025-1';这段 SQL 值得反复看,它就是数据库面试里“多表联查”的实操版。JOIN ON 负责把三张表按外键关系拧在一起,WHERE 负责过滤出具体条件。很多人在大学阶段只刷过增删改查单表操作,碰到这种三表联动就蒙,这个项目里的 t_teach_task 给你提供了一个完整的对照样本,答辩时能讲清楚“中间表为什么存在”就已经超过一半人。
2.3 数据库连接配置在哪改:DBUtil 的读取链路与编码参数
这类老项目通常有一个 DBUtil.java,所有 DAO 都从它这里拿 Connection。它的核心逻辑是:静态代码块里加载 MySQL 驱动类,然后读 url、用户名、密码,最后提供一个 getConnection() 方法给上层调用。课设项目一般不会接池子,裸 JDBC 直接连,够用且好懂。
package db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static String url = "jdbc:mysql://localhost:3306/tams?useUnicode=true&characterEncoding=utf8"; private static String user = "root"; private static String password = "123456"; static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } }逻辑说明:Class.forName 在类加载时执行一次,把 MySQL 驱动注册到 DriverManager;getConnection 每次调用都会新建一个物理连接,用完必须关闭。这里的 url 是最容易被改错的地方,重点看三个参数:localhost:3306 是 MySQL 地址和端口,tams 是数据库名,useUnicode=true 和 characterEncoding=utf8 保证 Java 写入 MySQL 的中文按 UTF-8 编码传输。如果漏掉 characterEncoding,后面所有中文落库都会变成问号,而且症状特别隐蔽。
参数说明:user 和 password 必须改成你本地 MySQL 的实际账密,很多资源包作者习惯用 root/root 或 root/123456,不改就在连接时报 Access denied。另一个细节是驱动类名,如果本地装的是 MySQL 8.0 以上,要换成 com.mysql.cj.jdbc.Driver,URL 里还得追加 serverTimezone=Asia/Shanghai,否则会直接抛时区异常。硬编码账密在工程规范上不够体面,但课设项目普遍这么干,你要掌握的是能说清楚“改成 db.properties 外部配置会更规范”这个改进方向。
3. 在 MyEclipse + Tomcat + MySQL 里把项目跑通:建库、部署、打通一次请求
环境老三样:MyEclipse、Tomcat、MySQL。这一章按执行顺序来,新手照抄步骤,熟手重点看 3.1 的版本搭配和 3.4 的请求链路,那两节最容易翻车。
3.1 版本组合怎么选:JDK 与 Tomcat 的匹配关系
这类课设包对版本特别敏感,因为项目编译的 Java 字节码版本必须被 Tomcat 里的 JVM 接受,版本对不上就抛 UnsupportedClassVersionError。我习惯的组合是 JDK 1.8 + Tomcat 8 + MySQL 5.7 + mysql-connector-java-5.1.x 驱动,这套搭配兼容性最好,网上能找到的报错资料也最多。
| 组件 | 推荐版本 | 备注 |
|---|---|---|
| JDK | 1.8 | 编译级别设为 1.8,别手滑选 11 或 17 |
| Tomcat | 8.5 | 支持 Servlet 3.1,足以跑这类 JSP 项目 |
| MySQL | 5.7 | 与老驱动配合最稳,8.0 需额外处理认证协议 |
| MySQL 驱动 | 5.1.x | 对应 com.mysql.jdbc.Driver,5.7 标配 |
| MyEclipse | 2014 及以上即可 | 自带 Tomcat 插件,无需单独装 IDE |
为什么不用更高版本?Tomcat 9 以上把包名从 javax.servlet 换成 jakarta.servlet,这个项目按 javax 老一套写的,直接部署会报 NoClassDefFoundError。MySQL 8.0 不是不能用,但第一,5.1 驱动连不上 8.0 的默认认证方式;第二,连接串要多加 serverTimezone 和 allowPublicKeyRetrieval;与其在环境里和自己搏斗,不如先把 5.7 跑起来,把时间留给业务代码。如果机器上已经装了 MySQL 8.0 不想动,后面避坑章节有针对性的招。
3.2 建库导数据:把 tams.sql 导入 MySQL 的完整命令
拿到 tams.sql 之后,第一步是建库,第二步是导数据。直接给命令行操作,不用图形界面,是因为命令行能把导入过程的报错原样打出来,方便你定位是编码问题还是脚本问题。
mysql -uroot -p -e "CREATE DATABASE tams DEFAULT CHARACTER SET utf8mb4;" mysql -uroot -p --default-character-set=utf8mb4 tams < tams.sql mysql -uroot -p -e "USE tams; SHOW TABLES;"三行命令分别做什么:第一行创建数据库 tams,指定 utf8mb4 字符集,这决定了整库的默认编码;第二行把 tams.sql 里的建表语句和初始数据导入 tams 库,--default-character-set=utf8mb4 保证 SQL 文件里已有的中文初始数据在导入过程中不乱码;第三行查看 tams 库里生成了哪些表,确认导入成功。执行时如果提示密码错误,把 -p 后面直接带上密码,比如 -proot,注意 -p 和密码之间不能有空格,这是 MySQL 命令行的老规矩。
如果 tams.sql 文件头里已经写了 CREATE DATABASE IF NOT EXISTS tams,那第一行可以省掉,直接把第二行改成 source 命令在 mysql> 提示符下执行:
source D:/workspace/tams/tams.sqlsource 命令的路径里建议用正斜杠,Windows 下反斜杠有时会被当转移字符处理,导致文件找不到。导入后如果发现部分表名或字段名不对,打开 tams.sql 文本对照检查,重点看建表语句末尾有没有 ENGINE=InnoDB 和 CHARSET,缺了 CHARSET 的表会沿用库默认字符集,中文照样能存,但和 Java 端 UTF-8 配合时容易出现乱码隐患。
3.3 MyEclipse 导入工程与部署 Tomcat 的实操步骤
导入工程是这一类课设包里最容易卡住的节点,卡住的点不是技术难,而是步骤顺序错了。先在 MyEclipse 里做 File → Import → General → Existing Projects into Workspace,然后选择解压后的文件夹路径。注意选目录要选到带 .project 文件的那一层,也就是 web 工程根目录,而不是外面多包了一层母目录。如果选错了,导入的会是一个普通文件夹,MyEclipse 不会认它作 Web 项目。
导入后如果工程图标上没有带地球图标,说明它没有被识别为 Web 工程,常见做法是右键工程 → MyEclipse → Add Web Project Capabilities,把它重新标记为 Web 项目。这一步在很多老资源包里是必须的,因为压缩包从别人机器导出后,IDE 的工程元数据可能丢失了一部分。
接着检查 Build Path 里有没有 MySQL 驱动。如果没有,把 mysql-connector-java-5.1.x.jar 复制到 WEB-INF/lib 目录下,然后右键工程 → Build Path → Add JARs,把 jar 添加进去。这一步漏掉,运行时会报 ClassNotFoundException: com.mysql.jdbc.Driver,后面避坑章节会细讲。
部署 Tomcat 的路径是 Window → Preferences → Servers → Tomcat,指定 Tomcat 安装目录和 JDK 版本,然后在 Servers 视图里右键点 Add Server,选对应版本的 Tomcat。最后在工程上右键 → Run As → MyEclipse Server Application,Tomcat 会先编译后发布,控制台出现类似 “INFO: Server startup in 5200 ms” 的日志,才算启动成功。浏览器访问地址默认是 http://localhost:8080/tams/ ,注意这个上下文路径取决于工程名,如果工程名改过,访问路径也跟着变。
3.4 以“添加教师”为例:从 JSP 表单到 Servlet 再到 MySQL 的一次请求链路
功能代码不用全读,挑“添加教师”这一条链路看就够理解整套系统的运行方式了。前端 teacher_add.jsp 里有一个 form 表单,method 是 post,action 指向某个 Servlet 路径:
<form action="TeacherAddServlet" method="post"> 教师编号:<input type="text" name="teacherNo" /> 教师姓名:<input type="text" name="teacherName" /> 职称:<input type="text" name="title" /> <input type="submit" value="保存" /> </form>表单提交后,请求带着 teacherNo、teacherName、title 三个参数到达 TeacherAddServlet,这个 Servlet 的 doPost 是这么处理的:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String teacherNo = request.getParameter("teacherNo"); String teacherName = request.getParameter("teacherName"); String title = request.getParameter("title"); TeacherDao dao = new TeacherDao(); boolean ok = dao.addTeacher(teacherNo, teacherName, title); if (ok) { response.sendRedirect(request.getContextPath() + "/teacherList.jsp"); } else { request.setAttribute("error", "添加失败"); request.getRequestDispatcher("/teacher_add.jsp").forward(request, response); } }逻辑说明:request.setCharacterEncoding("utf-8") 必须在第一次调用 getParameter 之前执行,否则 POST 请求的中文参数会被按 ISO-8859-1 解码,到后端就变成乱码;getParameter 从请求体里按 name 取值,三个参数对应页面三个输入框;TeacherDao.addTeacher 内部通过 PreparedStatement 执行 INSERT,成功返回 true;sendRedirect 让浏览器跳到教师列表页,转发则留在原页面并回显错误信息。这里最坑的地方在最后一行,如果 response.sendRedirect("/teacherList.jsp") 少写了 request.getContextPath(),在 Tomcat 里会因为路径少了应用名直接 404。这类路径问题,就是老项目里最常见的黑匣子之一,页面一白,你也不知道是代码错了还是请求根本没到 Tomcat。
4. 避坑清单:乱码、驱动、端口与上下文路径,四类高频翻车现场
跑 Java Web 老项目,环境问题占了运行失败原因的九成。这一章直接给踩坑记录,每一条都是我在部署这类资源包时亲眼见过的现象。先给一个排查框架,再逐条拆解。
4.1 启动顺序与排查策略:先别改代码,按这条链走
项目跑不起来,第一件事不是改代码,而是分清故障发生在哪一层。我的排查顺序固定是:Tomcat 能不能起来,起来后工程有没有发布成功,页面报的是 404 还是 500,然后才轮到 Java 代码具体错在哪。Tomcat 启动失败看控制台红色日志,常见是端口被占或 jar 冲突;页面 500 看 Tomcat 控制台堆栈,定位到具体类和行号;页面 404 则先怀疑上下文路径和 JSP 文件名;中文乱码则要从前端 JSP 编码、Servlet 解码、数据库字符集三个环节依次排查。这个顺序不乱,能省下大量和黑匣子搏斗的时间。
4.2 高频踩坑记录:每条都附现象、原因与解决办法
踩坑 1:表单提交后,中文全部变成 ??
现象:在添加教师页面输入“张老师”,列表页显示“???”,MySQL 里存的也是“???”。原因分两层:一是 Java 端没有在 Servlet doPost 开头调用 request.setCharacterEncoding("utf-8"),POST 参数被按 ISO-8859-1 解码;二是连接数据库的 URL 里没带 characterEncoding=utf8,JVM 往 MySQL 传中文时用默认编码。解决办法是把三处一起改掉:JSP 顶部声明 pageEncoding 和 contentType 为 utf-8;Servlet 里最先执行 setCharacterEncoding;DBUtil 的 URL 带全 useUnicode=true&characterEncoding=utf8,另外确认数据库和表本身是 utf8mb4。改完后重启 Tomcat,再提交一条带中文的数据验证。这一类问题很多人只改 Servlet 不检查数据库,结果表面好转,换一台机器又翻车。
踩坑 2:ClassNotFoundException: com.mysql.jdbc.Driver
现象:Tomcat 能启动,点击任何需要查数据库的功能时,控制台抛出 Java 类找不到驱动,页面 500。原因:mysql-connector-java.jar 没有进入运行时的 WEB-INF/lib,或者只放在本地目录没拷进工程。解决办法:把 jar 文件复制到 WebRoot/WEB-INF/lib(注意不是 src 目录),然后在工程属性 Build Path 里用 Add JARs 把它加进来,最后重新部署并重启 Tomcat。如果你把 jar 放在自己测试目录里跑,Eclipse 单跑普通 Java 类能连库,但部署到 Tomcat 后 Tomcat 不认识你的本地路径,这是新手最容易怀疑“玄学”的点之一,其实原理就是 classpath 边界问题。
踩坑 3:Tomcat 能启动,但页面总是 404
现象:Tomcat 启动正常,访问 http://localhost:8080/tams/ 要么空白,要么提示 404 Not Found。原因往往不是代码错,而是部署上下文路径不对。一是工程名和访问路径不一致,比如工程导入后被 MyEclipse 重命名为 history,访问路径就变成了 /history/;二是 JSP 里的 form action 和 Servlet 映射路径没带应用名。解决办法分两步:先确认 Servers 视图里发布的上下文根路径是什么,再用浏览器按那个路径访问;所有 JSP 里的 action 和超链接统一改用相对路径,或者用 request.getContextPath() 拼接。我惯用的做法是把工程名固定为 tams,然后所有表单 action 都写 action="TeacherAddServlet" 这种不带斜杠的相对路径,只要 JSP 和 Servlet 在同一目录层级,怎么部署都不会 404。
踩坑 4:UnsupportedClassVersionError / 找不到 javax.servlet.http.HttpServlet
现象:Tomcat 启动过程中报 UnsupportedClassVersionError,或者编译报 HttpServlet 找不到。原因:当前 Java 编译级别高于 Tomcat 支持的版本,Class 文件版本号 Tomcat 里的 JVM 不认;HttpServlet 找不到则说明 Tomcat 运行时尚未绑定到工程或 JDK 版本设置有问题。解决办法:Window → Preferences → Java Compiler,把 Compiler compliance level 改成 1.8;Window → Preferences → Servers → Tomcat,确认选的是本地 Tomcat 8.5 目录,Runtime Environment 勾选 JDK 1.8。改完后 Project → Clean 强制重新编译,清掉旧的 class 文件再部署。这个错最容易发生在电脑上装了 JDK 17 但项目绑定的还是老 Tomcat 的机器上。
踩坑 5:MySQL 8.0 报 Public Key Retrieval is not allowed
现象:本地装的是 MySQL 8.0,然后用 5.1 驱动连库,报 Public Key Retrieval is not allowed,看起来像网络问题,其实是认证协议变了。原因:MySQL 8.0 默认用 caching_sha2_password 认证,老驱动不支持这个协议。解决办法有两种:一是换 mysql-connector-java 8.0.x 及以上驱动,同时把驱动类名改成 com.mysql.cj.jdbc.Driver,URL 加上 serverTimezone=Asia/Shanghai 和 allowPublicKeyRetrieval=true&useSSL=false;二是更省事的做法,装 MySQL 5.7 或者把目标账户改成 mysql_native_password。对于课设项目,没有任何必要为了这个去硬啃 MySQL 8.0 的认证细节,直接用 5.7 最省心。如果你非要留 8.0,那就一定记得上面的 URL 三件套,一个都不能省。
5. 验证全链路与一个实用增强:让项目告别“能跑就行”
项目能在浏览器里出页面,只是及格线。接下来做两件事:学会验证一条数据是真实走完了全链路,以及加一个低成本的乱码增强。这两件事做完,你对这个项目的掌控感会完全不一样。
5.1 验证一次完整请求:从点击按钮到数据库落库
以“添加教师”为例,打开 Chrome 开发者工具切到 Network 面板,在页面里提交表单。观察新增的这条请求,能看到请求方法是 POST,Form Data 区里依次列着 teacherNo、teacherName、title 三个字段和值。这一步证明前端到 Servlet 是通的。接着在 TeacherDao.addTeacher 里临时加一句 System.out.println 输出 SQL 和参数,重新部署,提交后看 Tomcat 控制台有没有打印,这一步证明 Servlet 到 DAO 没问题。最后在 MySQL 命令行执行:
SELECT * FROM t_teacher ORDER BY teacher_id DESC LIMIT 5;如果刚才提交的记录出现在结果里,整条 JSP → Servlet → DAO → MySQL 链路就全部验证通过了。这三个步骤平时很多人懒得不做,项目改着改着某个环节断了都不知道,答辩时一问三不知。从那以后我每次接手这类老项目,都强制自己先走一遍这条验证链路,把所有模块的入口出口摸清,再开始做任何改动。
5.2 一个低成本增强:字符编码过滤器
老项目每个 Servlet 都要手动 setCharacterEncoding,少写一个就乱码一次。与其靠记性,不如加一个过滤器统一处理,这算是对这套老架构最实用的增强,花十分钟配完一劳永逸:
package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; @WebFilter("/*") public class EncodingFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException {} public void destroy() {} }逻辑说明:@WebFilter("/*") 表示拦截所有请求,在过滤链把请求传给 Servlet 之前就把编码设置好,这样任何 doPost 里面都不需要再手写 setCharacterEncoding。参数说明:response.setCharacterEncoding 是让 Servlet 返回的内容按 UTF-8 编码输出,避免响应内容也出现中文乱码;注意只做 CharacterEncoding,不要在这里动 ContentType,以免影响 JSP 自己配置的 contentType 和 pageEncoding。注册方式可以直接用注解,老一点的 MyEclipse 版本不支持注解的话,在 web.xml 里声明 filter 和 filter-mapping 也是一样的效果。
配完这个过滤器,再去表单里提交中文数据,你会发现整个系统的中文乱码翻车率大幅下降。最后说句实在的:这类老课设项目,技术本身不复杂,真正劝退人的全是编码、路径、端口这些环境消耗。希望帮到你。
本文还有配套的精品资源,点击获取