学校维修系统中提交报修和报修成功页面核心代码的实现
**
一、SubmitOrderServlet.java
**核心作用
1.request.setCharacterEncoding(“utf-8”):接收前端表单中文(地址、故障描述、分类名)不会出现问号乱码;
2.response.setContentType:告诉浏览器返回内容是 HTML 文本,编码 UTF-8,弹窗 alert 中文正常显示。
获取当前访问用户的服务器会话空间 Session
读取登录用户信息,完成登录 + 权限校验
用户访问报修接口 → 取 Session 登录用户
无登录信息 → 弹窗提示 + 跳转登录页,结束;
已登录但不是学生 → 弹窗提示 + 返回上一页,结束;
已登录且是学生(role=0)→ 放行,执行获取表单、插入报修工单逻辑。
1.request.getParameter(“xxx”)
从前端报修页面表单里取出用户填写 / 选择的数据,接收 POST 提交的表单值;
2.typeId 做Integer.parseInt转换
前端传过来的表单数据全是字符串,报修分类 ID 是数字,必须转成 int 才能和数据库分类 ID 匹配对比;
1.new RepairTypeDao().findAllType()
调用 DAO 层,查询数据库里全部故障分类,封装成RepairType对象集合(每个对象存分类 id、分类名称);
2.增强 for 循环遍历分类列表
拿前端传过来的typeId,和每一条分类的 id 对比;
3.匹配成功后取出getTypeName()并break
找到对应分类的文字名称,立刻跳出循环,减少多余遍历;
1.定义新增报修工单的插入 SQL,向repair_order工单表写入数据;
2.DBUtil.getConn():调用工具类获取 MySQL 数据库连接;
3.pstmt预编译对象先初始化为 null,后续在 try 内实例化,方便 finally 统一关闭。
4.conn.prepareStatement(sql):预编译 SQL 语句,数据库提前解析 SQL 模板,执行效率更高,同时隔绝恶意注入语句;
setString(下标,值):按顺序给 4 个占位符填充之前组装好的报修数据;
executeUpdate():执行增 / 删 / 改 SQL,返回受影响行数,这里完成工单插入数据库;
执行成功后向前端输出 JS:弹窗提示提交成功,自动跳转到系统首页index.html。
完整执行流程
权限校验通过 → 组装报修表单数据 → 打开数据库连接 → 预编译插入 SQL 并填充参数 → 执行入库
成功:弹窗成功提示 + 跳首页;
失败:控制台打印错误 + 前端弹窗失败提示;
无论成败:关闭数据库连接,释放资源。
二、GetCategoryServlet.java
1.response.getWriter() 获取响应输出流对象 PrintWriter
2.RepairCategoryDao 是报修分类数据访问层 DAO 类,专门负责操作数据库里的故障分类表;
3.调用 DAO 的findAllCategory()方法,执行 SQL 查询数据库中所有报修故障分类;
4.每一条分类数据封装为RepairCategory实体类对象,全部存入 List 集合categoryList;
StringBuilder:高效拼接字符串,相比直接+拼接不会频繁创建新字符串,性能更好;
json.append(“[”):JSON 数组起始符号,最终格式是 [{},{},…]。
1,循环取出每一条报修分类实体 cat;
2.{ 代表单个分类 JSON 对象开始;
3.拼接键值对:
“id”:数字:分类编号;
“categoryName”:“文字”:分类名称(水电 / 门窗等);
4.} 闭合单个分类对象。
1.闭合Json数组
2.out.write():把拼接好的完整 JSON 字符串写入浏览器响应;
flush():强制刷新缓冲区,立刻把数据发送出去;
close():关闭输出流,释放 IO 资源。
实现效果:
