ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java校友管理系统源码导入跑通与改造:期末大作业实战指南

Java校友管理系统源码导入跑通与改造:期末大作业实战指南 简介这是一份基于Java的校友管理系统期末大作业源码包适合高校计算机相关专业学生完成Java Web课程设计或期末综合作业。系统采用JSPServletJavaBean经典分层架构覆盖前端页面展示、后端逻辑处理与数据库交互实现校友信息的录入、查询、编辑、删除以及用户登录注册等核心功能整体业务逻辑完整可直接运行演示。压缩包共40个文件主要由13个JSP页面、4个Java类、6个JavaScript脚本、6个XML配置、2个CSS样式和1个JAR依赖库构成并附带若干图片素材整体大小约1.27MB目录层级分明便于导入IDE后快速定位代码。目前已有289人学习下载。通过研读这份源码读者既能梳理Java Web项目从页面请求到服务器响应的执行链路也能学习分层开发中类与页面之间的调用关系还可根据自身选题对模块进行二次扩展是期末大作业极佳的参考范本。1. 期末大作业“基于 Java 的校友管理系统源码.zip”先看清楚是不是你要的那个每年期末都有人抱着一个“校友管理系统源码.zip”四处找答案可真正打开压缩包后一半人卡在 JDK 环境一半人卡在数据库连接还有一半人发现自己拿到的根本不是 Java 工程而是网页模板。这篇文章按一线工程师的做法把一个基于 Java 的校友管理系统从解压、导入、跑通到改造成自己的大作业讲透。适合正在做课程设计、需要交源码和答辩稿的同学也适合想借这个项目复习 Java 基础、MyBatis 和 Spring Boot 的人。你不需要是高手只要会照步骤执行就能把它变成一份能讲清楚、敢演示的期末大作业。2. 解压源码后的第一步判断技术栈和目录结构别急着点运行2.1 一个 zip 里可能藏着三种 Java 后端形态很多同学拿到 zip 后第一时间双击解压然后把整个文件夹拖进 IDEA期望右上角出现一个绿色小三角。结果等来的不是启动成功而是一大片红色报错。校友管理系统这份源码在作业圈里流传的大致有三种形态区分它们其实只需要一个动作用压缩软件打开 zip看根目录下有没有pom.xml。第一种是 Spring Boot MyBatis Maven这种最现代也最容易跑。识别标志是根目录有pom.xml源码在src/main/java下配置文件在src/main/resources下。第二种是 JSP Servlet JDBC 的老式纯 Java Web 工程识别标志是没有pom.xml但有WEB-INF/web.xml代码里大量出现HttpServletRequest和PrintWriter。第三种是 SSMSpring SpringMVC MyBatis的老 Eclipse 工程它可能也有pom.xml但目录结构是 Eclipse 风格的src/main/java加src/main/webapp。这三种形态决定了你后面一半的工期。如果你把 JSP 老工程当成 Spring Boot 项目导入IDEA 会找不到主类你会花一整晚会去搜“java环境变量配置详细教程”以为是自己 JDK 装错了。反过来如果你把 Spring Boot 项目丢进 Eclipse 的 Dynamic Web Project只会得到一张没有任何依赖的空白工程。所以解压后的前五分钟不要写代码先摸清它是哪种形态。下面这张表是我平时拿到源码工程会做的快速体检你也可以照着做形态关键标记推荐导入方式启动入口Spring Boot Mavenpom.xmlSpringBootApplication主类IDEA 导入 Maven 工程运行主类的 main 方法SSM 传统 Maven 工程pom.xmlweb.xmlIDEA 导入 Maven 工程配置 Tomcat配置 Tomcat 后发布 warJSP Servlet 老工程WEB-INF/web.xml无pom.xmlEclipse Dynamic Web Project配置 Tomcat 后启动这一步判断的价值在于它能帮你提前避开“换电脑就翻车”的坑。很多校友管理系统源码是老学长手工拷贝的里面可能带着.class文件却没有.java源码。如果src目录下全是 class 而不是 java那这个包基本没法改趁早换一个别浪费时间。2.2 用 5 分钟把项目导入 IDE关键导入参数与 JDK 选型假设你拿到的是最常见的 Spring Boot MyBatis 形态导入步骤是固定的。在 IntelliJ IDEA 里依次点击File - New - Project from Existing Sources选中刚才解压的目录然后选择Import project from external model再选Maven一路 Next。Eclipse 用户则是File - Import - Existing Maven Projects然后指向根目录。导入之后不要急着点运行先看右侧 Maven 面板里的Lifecycle如果能看到clean、compile、package这些命令说明 Maven 识别成功了。如果面板是空的说明 IDEA 没有把它当成 Maven 项目这时可以右键pom.xml选择Add as Maven Project。接下来是最关键的 JDK 选型。打开pom.xml看两个地方parent里的 Spring Boot 版本以及properties里的java.version。我一般会把项目固定在 JDK 8 或 JDK 11尤其是老源码千万别直接上 JDK 17。Spring Boot 2.x 在 JDK 17 下偶尔会出现反射报错而 Spring Boot 3.x 又强制要求 JDK 17里外里都会卡。所以最稳的做法是统一用 JDK 8配合 Spring Boot 2.7.x。!-- 解压后先看 pom.xml 的 parent 和 properties -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId !-- 2.x 和 3.x 对 JDK 要求不同2.x 用 JDK8 即可 -- version2.7.18/version relativePath/ /parent properties java.version1.8/java.version /properties这段配置的逻辑是parent里的 Spring Boot 版本决定了整个依赖体系包括 MyBatis 的版本、Jackson 的版本、内置 Tomcat 的版本。properties里的java.version会传给maven-compiler-plugin控制编译级别。如果这两项和你本地的环境不一致就会出现代码不报错、一启动就叫唤的情况。比如你在 JDK 17 下编译一个java.version1.8的项目语法上没问题但依赖里的某些反射调用可能被 Java 模块系统拦下来。所以不要小看这个参数。另外Maven 的仓库地址我也建议提前改好。在 IDEA 的Settings - Build Tools - Maven里把User settings file指向你自己的settings.xml里面最好配置阿里云镜像否则下载依赖的时间够你刷半个小时的短视频。这一步和 JDK 配置一样属于准备工作里的血泪经验。2.3 没有 pom.xml 的老式 Web 项目怎么救如果 zip 里根本没有pom.xml只有WEB-INF/web.xml和一堆src文件夹那你最好找一个 Eclipse 来处理。在 Eclipse 里新建一个Dynamic Web Project项目名填成和源码根文件夹同名然后把源码里的src内容和WebContent内容原样拷进去。这里要注意两个地方第一Project Facets里要勾选Dynamic Web Module版本选 3.0 或 4.0Target Runtime 选你本地的 Tomcat第二如果源码里的中文注释是乱码多半是编码问题。老项目喜欢用 GBK而 IDE 默认 UTF-8这时候在 Eclipse 的Window - Preferences - General - Workspace里把Text file encoding改成 GBK重启之后再看。如果非要留在 IDEA 里用老工程我一般会在 IDEA 里新建一个空的 Maven war 工程然后把老工程的src和WebContent拷进去再用File - Project Structure - Modules - Dependencies把WEB-INF/lib下的 jar 包全部Add as Library。这个操作有点绕但能解决老项目在 IDEA 下的导入问题。难点在于你不能漏掉任何一个 jar否则运行时会出现ClassNotFoundException。为了不陷入这种麻烦很多时候我宁可花十分钟用 Spring Boot 重写一个轻接口也不要继续维护老式 Servlet 工程。期末大作业的目的是让你讲清楚业务逻辑不是让你和 IDE 较劲。3. 把数据库跑通SQL 脚本、连接配置与第一个启动错误3.1 先找到 SQL 脚本再区分“建库脚本”和“示例数据脚本”校友管理系统没有数据库是跑不起来的这一点排在所有步骤的前面。解压源码后通常在db、sql或docs目录下能找到alumni.sql、alumni_system.sql之类的文件。打开这个文件先看前几行。如果第一行是CREATE DATABASE说明这是一个完整的建库脚本可以直接执行。如果第一行是CREATE TABLE说明它不包含建库语句你需要手动先建一个数据库再导入表结构。我习惯先在命令行里把库建出来避免脚本自带的字符集和本地不一致。打开终端执行下面的命令会在 MySQL 里创建一个默认字符集为utf8mb4的数据库mysql -u root -p -e CREATE DATABASE IF NOT EXISTS alumni_system DEFAULT CHARACTER SET utf8mb4;这条命令的意思是用 MySQL 的-e参数直接执行一条 SQL不用进入交互模式。-u root -p会让你输入密码utf8mb4是最重要的它能完整支持中文和 emoji避免后面页面显示问号。建好库之后再把 SQL 脚本导入到刚建的库里。如果脚本本身包含CREATE DATABASE也可以直接执行mysql -u root -p alumni.sql但如果脚本里有USE alumni_system而你没有这个库导入会失败。我一般会在导入前手动建库这样最安全。导入成功后执行一条命令确认表数量mysql -u root -p -e USE alumni_system; SHOW TABLES;正常情况下你会看到alumni_user、alumni_info、major之类的基础表也可能有donation这种扩展表。看到表不代表数据没问题你还要抽查几行数据比如执行SELECT * FROM alumni_user LIMIT 5;确认里面有初始管理员账号。很多源码自带的 SQL 脚本只建表不插数据如果连初始账号都没有你连登录界面都进不去那才是真的踩坑。3.2 改对四个连接参数url、username、password、driver数据库建好之后代码和数据库之间还差一个配置文件。Spring Boot 项目的配置文件在src/main/resources下常见的名字是application.yml或application.properties。老式项目可能是jdbc.properties或者直接在spring/applicationContext.xml里写死。不管是哪种你需要改的都是四个参数连接地址、数据库名、用户名、密码。以最常见的application.yml为例找到spring.datasource这一段按下面的样子改spring: datasource: url: jdbc:mysql://localhost:3306/alumni_system?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver这段配置里最重要的不是username和password而是url最后面的serverTimezoneAsia/Shanghai。如果你漏掉这个时区参数MySQL 8 会直接报一个关于Server time zone的异常。useUnicodetruecharacterEncodingutf8是为了让中文不乱码useSSLfalse是关闭 SSL 警告本地学习环境没必要开加密连接。driver-class-name这一项也要和你的 MySQL 版本对应。MySQL 5.x 时代大家用的是com.mysql.jdbc.Driver到了 MySQL 8.x数据库驱动包换成了com.mysql.cj.jdbc.Driver。如果你拿到的源码里是旧驱动而你本地装的是 MySQL 8启动时就会提示驱动类不存在或者不兼容。解决办法是去pom.xml里看 MySQL 连接的依赖版本改成 8.xdependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId !-- 版本号和你的数据库版本匹配8.0.x 对应 JDK8 -- version8.0.33/version /dependency改完连接参数后很多同学会犯一个低级错误密码里带了特殊字符比如123456qq而 yml 文件的解析规则里在某些配置下会被当成特殊符号。遇到这种情况有两种处理办法一种是在password上加双引号另一种是干脆把数据库密码改成纯字母数字。我建议后端直接全部用双引号包起来省得为字符转义头疼。3.3 启动后台服务端口、上下文路径和第一次报错数据库配置改好就可以启动后端了。如果你的项目是 Spring Boot 形态最简单的方式是在 IDEA 里直接运行带SpringBootApplication注解的主类。如果你更喜欢命令行在项目根目录下执行mvn spring-boot:run这条命令会先执行编译然后启动内置 Tomcat。看到控制台出现Started Application in xx seconds或者Tomcat started on port(s): 8080才算成功。如果出现APPLICATION FAILED TO START不要慌后面有一行Description:才是真正的错误原因。最常见的三个是数据库连不上、端口被占用、Mapper 扫描不到。端口被占用时错误信息会告诉你Port 8080 was already in use。解决办法是先查谁占了端口再改项目端口。Windows 下执行netstat -ano | findstr 8080看到一行 PID 后打开任务管理器找到对应的进程结束它。不想和系统里的其他进程纠缠就改端口。在application.yml里加一句server: port: 8081改完端口后访问地址也要跟着变否则你刷了半天页面还是白的。如果用传统 Tomcat 发布 war 包访问路径通常不是根路径而是http://localhost:8080/项目名/比如http://localhost:8080/alumni_war_exploded/。这个项目名和你的应用上下文路径有关在 IDEA 的 Tomcat 配置里可以改Application context我经常看到有人卡在 404就是因为这个路径没对上。到这里项目基本能起来了。但是启动成功只是开始真正决定你能不能把它讲清楚的细节全都藏在业务代码里。4. 把核心业务读明白校友管理的增删改查与关键代码位置4.1 从登录模块入手理解会话、权限和加密业务代码不要从第一行读到最后一个括弧那是低效的。我的习惯是先找登录模块因为登录是一个 Web 项目里串联技术点最多的地方。它至少涉及三层Controller 接收请求、Service 校验逻辑、DAO/Mapper 查数据库。把登录这一条线读通其他模块你就能举一反三。在 Spring Boot MyBatis 的代码里登录 Controller 的典型实现长这样Controller RequestMapping(/admin) public class LoginController { Autowired private AdminUserService adminUserService; PostMapping(/login) public String login(String username, String password, HttpSession session) { AdminUser user adminUserService.findByUsernameAndPassword(username, password); if (user ! null) { session.setAttribute(adminUser, user); return redirect:/admin/index; } return redirect:/admin/login?errortrue; } }这段代码的逻辑是用户提交表单Controller 把用户名和密码传给 ServiceService 返回一个用户对象。如果用户存在就把它放进session然后跳到后台首页如果不存在回到登录页并带一个error参数。代码里最关键的是session.setAttribute(adminUser, user)这一句它决定了你后续所有页面如何判断“当前有没有人登录”。如果你在别的页面看到session.getAttribute(adminUser)那就是登录状态的校验。但要提醒一点老式校友系统里密码往往是明文处理的直接username和password查库。有经验的老师可能会在答辩时问你密码为什么不加密所以你在读代码时如果看到MD5相关的工具类说明这个系统考虑过加密如果完全没看到你要在答辩时主动补一句“这里应该加密我预留了改造方案”。这话能让你从一堆照抄的同学里跳出来。4.2 三层架构的调用链从 Controller 到 Mapper 的参数传递登录只是开胃菜校友信息管理才是主菜。几乎所有校友管理系统都有“校友列表”和“校友详情”这两个页面。在 Spring Boot MyBatis 工程里它们的代码位置很好找controller包下有一个AlumniControllerservice包下有一个AlumniServicemapper包下有一个AlumniMapper。点开AlumniController找到list或index方法。一个常见的带条件搜索的校友列表方法是这样GetMapping(/alumni/list) public String list(RequestParam(defaultValue 1) int pageNum, RequestParam(defaultValue 10) int pageSize, String keyword, Model model) { ListAlumni alumniList alumniService.pageQuery(pageNum, pageSize, keyword); model.addAttribute(list, alumniList); return alumni/list; }这里的关键参数有三个pageNum表示第几页pageSize表示每页几条keyword表示搜索关键词。很多老期末作业没有分页直接findAll然后返回到 JSP。如果源码里能出现pageNum和pageSize说明技术含量已经比平均线高了。你要理解的是RequestParam(defaultValue 1)表示当前台没传pageNum时用默认值 1这个写法在答辩中很出彩。再往下看AlumniService你会发现一个典型的注解——Service。这个注解就是告诉 Spring 容器把我交给容器管理。而AlumniServiceImpl里通常这样调用 MapperOverride public ListAlumni pageQuery(int pageNum, int pageSize, String keyword) { PageHelper.startPage(pageNum, pageSize); return alumniMapper.selectByKeyword(keyword); }PageHelper.startPage是 MyBatis 的分页插件这段代码会拦截下一条 SQL自动拼上LIMIT语句。如果你在源码里看到com.github.pagehelper相关依赖恭喜你这个项目抄的是比较新的范本。如果你没看到也不用担心老项目多是把LIMIT直接写在 XML 里。为了答辩不被问倒我的建议是精读AlumniMapper.xml里的selectByKeyword语句理解WHERE条件是怎么根据关键词拼接的。能独立讲清楚这条 SQL 的人至少能拿一个有思考的评价。关于 MyBatis 本身有些同学喜欢直接去搜“mybatis源码”开始啃我劝你不要在期末阶段花这个时间。你只需要记住三个核心点Mapper注解让 MyBatis 知道这个接口要生成代理实现Mapper.xml里的 namespace 必须和接口全限定名一致resultType或resultMap决定查询结果怎么映射到 Java 对象。这三点能帮你搞定源码里 80% 的疑问。4.3 导出 Excel / 上传头像期末答辩最容易加分的两个点如果时间允许把源码里“导出 Excel”和“上传头像”两个功能读明白你的答辩就稳了一半。很多校友管理系统会提供一个简单的版本校友列表页有个按钮叫“导出 Excel”后端用 Apache POI 生成.xls文件。典型代码如下GetMapping(/alumni/export) public void export(HttpServletResponse response) throws IOException { ListAlumni list alumniService.findAll(); Workbook workbook new XSSFWorkbook(); Sheet sheet workbook.createSheet(校友信息); // 第一行写表头 Row header sheet.createRow(0); String[] titles {姓名, 班级, 毕业年份, 现居城市}; for (int i 0; i titles.length; i) { header.createCell(i).setCellValue(titles[i]); } // 从第二行开始写数据 for (int i 0; i list.size(); i) { Row row sheet.createRow(i 1); row.createCell(0).setCellValue(list.get(i).getName()); row.createCell(1).setCellValue(list.get(i).getClassName()); row.createCell(2).setCellValue(list.get(i).getGraduateYear()); row.createCell(3).setCellValue(list.get(i).getCity()); } response.setContentType(application/vnd.ms-excel); response.setHeader(Content-Disposition, attachment;filenamealumni.xlsx); workbook.write(response.getOutputStream()); }这段代码的逻辑并不复杂查询全部校友用XSSFWorkbook创建一个 Excel 工作簿先写表头再写数据最后通过response的输出流传给浏览器。注意response.setHeader里的attachment表示让浏览器弹出下载框而不是直接打开。期末答辩时考官很可能会问“为什么导出的是 xlsx 而不是 xls”你可以回答XSSFWorkbook对应 Excel 2007 格式底层是 XMLHSSFWorkbook才是老版.xls。能说出这个区别说明你确实读过代码。上传头像的场景也很常见。Spring Boot 里处理文件上传用的参数类型是MultipartFile核心逻辑是先判断文件大小再写到本地路径或数据库BLOB字段。我会优先推荐写到本地路径因为数据库读大字段很吃亏。你在源码里看到FileOutputStream和UUID的时候就应该意识到这是用 UUID 生成随机文件名防止两个同学传同样的文件名互相覆盖。答辩时你甚至可以主动指出“这个系统把上传文件放在服务器磁盘没有做对象存储生产环境不行但作为期末作业是合理的”。5. 避坑与排查启动失败、中文乱码、404 和依赖问题5.1 现象页面中文全部变成问号数据库里也是问号原因字符集从 MySQL 到连接驱动再到 JSP 页面没统一。最常见的是数据库建库时没指定utf8mb4或者application.yml里的characterEncoding没写对。解决先把数据库表删掉重建建库时用DEFAULT CHARACTER SET utf8mb4连接 URL 里加上useUnicodetruecharacterEncodingutf8最后确认 JSP 或 HTML 页面头部声明了charsetUTF-8。如果老项目是 GBK 编码就别混着写统一改成 UTF-8 比逐个页面改强得多。这里我吃过一次亏表哥用 Eclipse 老工程分享给我页面是 GBK数据库是 UTF-8两边一拼接我只改了一处结果登录成功后名字显示正常列表页姓名全乱。后来索性把所有.jsp文件用编辑器的“批量转码”功能一次全转成 UTF-8问题才绝根。5.2 现象启动时报ClassNotFoundException: com.mysql.cj.jdbc.Driver原因项目依赖里的 MySQL 驱动版本偏老或者根本没有这个依赖。老代码里写com.mysql.jdbc.Driver而本地的 MySQL 8 连接库已经移除老驱动类。解决打开pom.xml把mysql-connector-java的版本改成 8.0.x同时把配置文件里的driver-class-name改成com.mysql.cj.jdbc.Driver。如果你用的是传统 Web 项目还要去WEB-INF/lib里检查有没有对应的 jar 包。这个报错还有个变种IDE 里明明有 jar但启动时依然找不到类多半是项目没把 jar 打进去在 IDEA 里右键项目Open Module Settings - Artifacts - Output Layout确认lib目录在发布包里。5.3 现象Tomcat 能启动但访问页面一直 404原因路径不匹配或者项目根本没有被部署到正确的上下文。Spring Boot 单独跑时默认访问http://localhost:8080/但传统 war 包部署后访问路径是http://localhost:8080/项目名/。解决先在控制台看启动日志里的Tomcat started on port(s)确认端口再看登录表单的action指向哪里。老 JSP 项目的表单action常常写成/login而 Controller 的RequestMapping是/admin/login差一级路径就 404。调试思路是先访问静态页面再访问 Controller逐步缩小范围别一上来就觉得是后端问题。5.4 现象Maven 依赖下载极慢或者一直卡在Resolving dependencies原因默认中央仓库在国内访问太慢。解决在settings.xml里配置阿里云 Maven 镜像镜像配置对骨架工程和第三方依赖都生效。具体写法是找到mirrors标签插入一个mirrormirror idaliyun/id mirrorOfcentral/mirrorOf urlhttps://maven.aliyun.com/repository/public/url /mirror这段配置会让所有从中央仓库请求的依赖都改走阿里云。改完后重启 IDEA 的 Maven 面板或者执行mvn clean compile看是否秒下。如果还是慢再看是不是开了代理导致 Maven 走了错误通道在 IDEA 里检查Settings - Appearance Behavior - System Settings - HTTP Proxy本地开发一般没必要开代理。5.5 现象代码里有 Lambda 表达式但启动时报invalid target release原因JDK 编译级别和当前JAVA_HOME不一致。比如pom.xml里写了java.version1.8但本机默认 JDK 是 17Maven 编译时用了新编译器却按旧参数生成字节码报错信息又指向 Lambda让人一头雾水。解决在 IDEA 右下角设置 Project SDK 为 JDK 8并检查Settings - Build Tools - Maven - Runner里的JRE是否也指向 JDK 8。命令行跑的话要先echo $JAVA_HOME或echo %JAVA_HOME%确认变量指向哪个版本。这里我建议大家直接把环境变量里的JAVA_HOME固定成 JDK 8再在 IDE 里单独给 Spring Boot 3 之类的项目指定 JDK 17这样不同项目互不干扰属于一劳永逸的做法。6. 把“别人的源码”变成自己的大作业三个改造点与答辩前验证下面这条要说给每一个打算直接交源码的同学听资源可以下载但答辩时你会暴露的。最好的路径是把别人的工程当作脚手架在它上面加三个你讲得清楚的小功能。这里给你三个低成本但高辨识度的改造点。第一个改造点是做一个“毕业年份统计”。在已有的alumni_info表上写一个简单的聚合查询按毕业年份分组统计人数然后在后台首页用表格或柱状图展示。SQL 就一行SELECT graduate_year, COUNT(*) FROM alumni_info GROUP BY graduate_year。在 Service 里加一个方法在首页 Controller 里把结果塞进 Model最后在前台页面循环输出。这个功能不需要新的表不需要复杂算法但能让答辩老师看出你不是只会跑别人的代码。第二个改造点是给下载的源码加一个“操作日志”。在登录成功和新增/修改校友信息时往一张日志表里插入一条记录内容包括操作人、操作时间、操作类型。实现方式可以是对现在的 Controller 方法简单加几行代码比如用session.getAttribute拿到当前用户名再调用日志 Mapper 插入数据。这背后其实涉及AOP的概念你不需要真的用 AOP但答辩时如果老师说“这个功能如果用到切面会更优雅”你可以接上这句话显得你理解过设计思想。第三个改造点是验证导出 Excel 的功能是否可靠。很多下载来的源码里导出功能都是写给人看的路段真正点按钮会报错或没反应。你在答辩前必须亲手点一次确认下载的文件能正常打开。如果报错多半是Content-Disposition里的文件名中文编码问题你可以改成英文名比如alumni_export.xlsx稳妥又不容易出 bug。改造完成之后用断点验证你的理解。在 IDEA 里给登录 Controller 的login方法第一行打一个断点然后按 Debug 启动项目从浏览器发起一次登录请求观察 IDE 里的调用栈。你能亲眼看到请求怎么从DispatcherServlet进到你的方法也能看到每一个参数的真实值。这个过程比读十遍代码都管用它会让你在答辩时说出的每一句话都有底气。最后说三个答辩前要背下来的问题这些其实也是 java 面试题里常考的东西。第一“这个项目的事务放在哪一层”你要能答出Transactional在 Service 层然后解释为什么 Controller 不放事务。第二“如果校友表有十万条数据你现在的分页会怎样”你要能答出当前用了PageHelper或LIMIT然后说大表需要加索引。第三“你如何防止 SQL 注入”如果源码用的是#{}你要说 MyBatis 的预编译机制如果看到${}你要主动说这是个隐患并指出可以怎么改。能把这三个问题回答上来说明你是真的把自己的名字写进了这份源码里。我做过不少这种课程设计最大的教训是不要留着“能跑就行”的心态交差。期末大作业的源码往往不完美但你不完美的地方恰恰是你可以加班十分钟改好的地方——比如给密码加个 MD5 加密比如给列表加个模糊搜索。哪怕只是改动二十行代码答辩台上的差别也很大。希望帮到你祝你顺利交差。本文还有配套的精品资源点击获取
返回列表