简介《JavaEE期末复习题库》由作者 m0_52861684 整理是一份面向高校计算机专业学生、针对 JavaEE 课程期末备考的 MyBatis 专项练习资料。题库围绕 MyBatis 框架的基础知识点展开设置了填空题、判断题、选择题与简答题四种常见题型覆盖全局配置文件、映射文件核心元素、ORM 框架理解、SQL 语句执行原理等考点并附有参考答案适合考前自测与知识巩固。资源包共 1 个 docx 文档压缩包大小约 41KB内容以按章节组织的习题与答案为主便于学生按需打印或电子阅读。该资源目前已有 2600 余人浏览学习是一份经过验证的实用备考资料。通过本套题库读者可以系统检验对 MyBatis 中配置元素、SQL 映射、事务提交、模糊查询防注入等知识点的掌握程度理解其与其他 ORM 框架的差异为后续 JavaEE 项目开发打下扎实基础。1. JavaEE期末复习题库别等考前三小时才找后悔药期末前一周A同学抱着一本《JavaEE期末复习题库》从最后一章往回刷越刷越慌明明代码对着课件敲完了换一道题还是不会。这不是记忆力的问题而是把题库当成了“题”没当成“知识地图”。JavaEE期末复习题库的本质是一套按Servlet/JSP、JDBC/事务、SSM与Spring Boot整合三条主线组织的练习集合它的价值不在于压中原题而在于帮你把“哪里不会”一次性暴露出来。这篇文章按我这些年带人复习的实际路径展开先讲考点怎么拆再讲典型题怎么写最后讲上机环境和考前收尾。适合正在备考的学生也适合需要带新人做考前辅导的初级工程师。2. 把JavaEE考点拆成三层Servlet/JSP、JDBC事务、框架整合怎么考2.1 Servlet与JSP的核心机制request生命周期与页面跳转的得分点Servlet考题几乎每卷必有一道用户从页面提交一个表单Servlet里用getParameter拿到参数处理后跳转页面。这道题判卷时真正看的不是代码能不能跑而是你有没有把request的作用域说清楚。常见错误是转发forward和重定向sendRedirect混着用答案里出现“request存的值在重定向后还能取到”这种硬伤一出现就是整道题扣分。代码题的标准写法是这样的WebServlet(/login) public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(UTF-8); String username request.getParameter(username); String password request.getParameter(password); UserService service new UserService(); User user service.login(username, password); if (user ! null) { request.getSession().setAttribute(user, user); request.getRequestDispatcher(/index.jsp).forward(request, response); } else { response.sendRedirect(request.getContextPath() /login.jsp?error1); } } }这段代码里request.setCharacterEncoding写在第一行解决中文参数乱码login方法返回User对象而不是boolean是为了让后续页面能拿到用户名这种业务信息登录成功用forwardURL不变session里的user不丢登录失败用sendRedirect地址栏变成login.jsp?error1这是两类跳转的典型分界。写答案的时候把“转发是服务器内部行为重定向是浏览器发第二次请求”这句话带上基本能保住这道题的半壁江山。JSP方面必背的是九大内置对象和四个作用域。很多考生背得出名字但题目改成“session和application有什么区别”就只能写“一个会话一个全局”拿不到满分。建议按生命周期去记page只在当前页面存活request在一次请求内有效session在一个浏览器会话内有效默认30分钟application从应用启动到关闭都存在。题库里常考的“统计网站访问次数”就是application对象的标准应用只要答出“每次访问用application.getAttribute取计数、加一、再放回去”这道题就稳了。这里还有一个隐藏考点Cookie和Session的关系。真题里常问“session丢了为什么登录状态还在”标准答法是Tomcat把sessionid放在Cookie里默认叫JSESSIONIDCookie过期或浏览器禁用时session对象还在服务器内存但客户端找不到它的钥匙了。所以很多系统会做URL重写用response.encodeURL把sessionid拼在链接后面这是书里容易跳过但考试爱考的一个细节。2.2 JDBC与事务控制连接池配置和三条必背的报错线索持久层是第二个必考块老题考手写JDBC新题考MyBatis映射。无论考哪种事务边界和连接管理都是共同考点。先把手写JDBC的标准模板过一遍Connection conn null; PreparedStatement ps null; ResultSet rs null; try { Class.forName(com.mysql.cj.jdbc.Driver); conn DriverManager.getConnection( jdbc:mysql://localhost:3306/shop?useSSLfalseserverTimezoneAsia/Shanghai, root, 123456); String sql select * from user where username ? and password ?; ps conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, password); rs ps.executeQuery(); if (rs.next()) { // 找到用户封装实体 } } catch (Exception e) { e.printStackTrace(); } finally { if (rs ! null) { try { rs.close(); } catch (SQLException e) {} } if (ps ! null) { try { ps.close(); } catch (SQLException e) {} } if (conn ! null) { try { conn.close(); } catch (SQLException e) {} } }记住三条线索。第一用PreparedStatement而不用Statement理由必须写“防SQL注入”这是安全加分点第二finally里关资源而且每个close都要包在自己的try-catch里否则前面close抛异常后面就不执行了第三连接串里的serverTimezone是给新版MySQL驱动用的不写会报时区错误。如果你在考场上一时想不起完整连接串抄这道题的模板再加上自己数据库的名字通常能救急。事务的考法一般是转账或下单一个方法里执行多条SQL要么全成、要么全不成。手写JDBC时最容易漏的是手动提交正确写法是setAutoCommit(false)放在try的开头所有SQL执行完再commitcatch里rollback。conn.setAutoCommit(false); try { ps1.executeUpdate(); ps2.executeUpdate(); conn.commit(); } catch (Exception e) { conn.rollback(); throw e; } finally { conn.setAutoCommit(true); conn.close(); }最后把autoCommit恢复成true再关连接这个细节写上去显得有实战经验。如果题里用的是MyBatis答案里出现SqlSession.commit()或Spring的Transactional都可以关键是说对时机事务要包住整个业务方法不能只包在DAO的单条SQL里。连接池也是高频考点问“为什么要用连接池”时标准答法是每次新建立连接要经历TCP握手、认证、初始化开销很大连接池把连接复用起来减少创建销毁成本。如果让配置数据源用Druid或HikariCP的最小配置即可url、username、password、initialSize、maxActive这五个属性写上就是完整答案。再补一句“连接用完要归还连接池而不是关闭连接”就更完整了。提示笔试题里看到“ClassNotFoundException: com.mysql.jdbc.Driver”先检查驱动依赖是不是没引入上机环境里则优先看pom.xml或lib目录。2.3 框架整合题型SSM还是Spring Boot判卷老师在看什么现在很多课程的期末已经不搞纯SSM写XML了而是Spring Boot为主。判断你们考哪种看课件目录里有没有pom.xml和application.properties就够了。但不管哪种框架判卷核心是一致的三层架构有没有写清楚、依赖注入有没有用上、数据库配置放在哪。一层一层说。表现层写Controller注意RestController直接返回JSON如果接口要跳页面得用Controller再在方法上按需加ResponseBody。业务层写Service接口和实现类类上标Service需要事务的方法标Transactional。持久层用Mapper接口加XML或注解接口上标Mapper或在启动类配MapperScan。Controller RequestMapping(/user) public class UserController { Autowired private UserService userService; PostMapping(/login) public String login(String username, String password, HttpSession session) { User user userService.login(username, password); if (user null) { return redirect:/login.jsp?error1; } session.setAttribute(user, user); return redirect:/index.jsp; } }这段代码有三个得分点Autowired是依赖注入不是new出来的返回值里redirect前缀的语义和Servlet版一致HttpSession由容器注入不需要自己创建。写框架题最忌讳的是在Service里自己new一个DAO——那等于直接告诉判卷老师你还不理解容器管理对象这一层。如果时间充裕再补一个Service接口和实现类分离的截图或片段印象分会再高一档。如果考SSM那就要熟悉applicationContext.xml和spring-mvc.xml的分工。数据源、事务管理器、MyBatis的SqlSessionFactoryBean放在applicationContext.xml组件扫描、注解驱动、视图解析器放在spring-mvc.xml。这个分工几乎是每年的固定简述题答题时先写“Spring管业务层、SpringMVC管表现层、MyBatis管持久层”再展开配置文件位置分就到手了。说一个很多人忽视的点Spring Boot题里启动类的位置有讲究。启动类必须放在所有包的根目录即controller、service、dao都在它的子包里否则SpringBootApplication的默认扫描范围扫不到运行时报“Consider defining a bean”的错。这个点不会单独考但会藏在错误排查题里知道原理就能一眼看穿。3. 题库里的高频高分题登录、订单事务、配置文件的写题模板3.1 手写用户登录的三层代码DAO层、Service层、Servlet层用户登录是JavaEE题库里出现率最高的综合题原因很简单一个题串起Servlet、JSP、JDBC、session四个知识点。上机考试这种题做对一半就能及格做全了就是优秀。我给备考的人定的标准是20分钟内无错写出三层完整代码。先写实体类不追求花哨字段对应表就好public class User { private Integer id; private String username; private String password; // 构造器、getter、setter 省略 }再写DAO层用一个类封装所有数据库操作。注意连接获取要抽到工具类不要每个方法都写一遍Class.forName和DriverManager.getConnection那样既啰嗦又容易漏关连接。public class UserDao { public User findUser(String username, String password) { String sql select id, username, password from user where username? and password?; try (Connection conn DBUtil.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { ps.setString(1, username); ps.setString(2, password); try (ResultSet rs ps.executeQuery()) { if (rs.next()) { User u new User(); u.setId(rs.getInt(id)); u.setUsername(rs.getString(username)); return u; } } } catch (Exception e) { e.printStackTrace(); } return null; } }这里用了try-with-resources代码比传统的try-catch-finally短一半资源还能自动关闭如果考试不禁止这种写法既省时间又不丢资源管理分。注意findUser返回的是User不是布尔值因为后续页面要显示用户名只返回true没有意义。SQL里用?占位符传参是防注入的基础写法笔试题里如果让你“完善这段代码”把字符串拼接改成PreparedStatement就是标准答案。Service层我一般建议写成接口加实现类但考试时间紧就直接写一个类也行。核心是体现业务逻辑登录成功后记录日志、更新最后登录时间这类操作放在Service这里处理DAO只负责单表操作。这个分层思想比代码本身更值钱。public class UserService { private UserDao userDao new UserDao(); public User login(String username, String password) { if (username null || username.trim().isEmpty()) { return null; } return userDao.findUser(username, password); } }Servlet层参考第2章那段代码在doPost里调service.login成功进首页失败回登录页并带error参数。三层写完上机题的主干就完整了。很多考生挂在这一题上不是因为不会写SQL而是把DAO和Service写成一坨或者忘了在Servlet里处理中文编码。备考时把这三层按模板各写一遍考试时只需要改类名、字段名、表名速度能快一倍。3.2 购物车/订单这类业务题的数据库设计与事务边界购物订单题比登录高一个难度级因为涉及多张表和多条SQL。题库里这类题的固定套路是用户下单后订单表插一条记录订单明细表插N条同时扣减商品库存。这三步必须在一个事务里否则会出现“订单建了库存没扣”的脏数据。数据库设计基本是死模板三张表orders主表、order_item明细表、product商品表。create table product ( id int primary key auto_increment, name varchar(50), price decimal(10,2), stock int ); create table orders ( id int primary key auto_increment, user_id int, create_time datetime, total_amount decimal(10,2) ); create table order_item ( id int primary key auto_increment, order_id int, product_id int, quantity int, price decimal(10,2) );写业务代码时事务边界是这道题最大的得分点。新手容易把插入订单、插入明细、更新库存拆成三个DAO方法分头调用事务根本没包住。正确做法是把三个操作放进一个Service方法方法上加Transactional或者手写JDBC时手动控制commit和rollback。Transactional public void createOrder(Integer userId, MapInteger, Integer cart) { Orders order new Orders(); order.setUserId(userId); order.setCreateTime(new Date()); orderDao.insert(order); for (Map.EntryInteger, Integer entry : cart.entrySet()) { OrderItem item new OrderItem(); item.setOrderId(order.getId()); item.setProductId(entry.getKey()); item.setQuantity(entry.getValue()); orderItemDao.insert(item); productDao.decreaseStock(entry.getKey(), entry.getValue()); } }注意order.getId()要在insert之后取框架会自动回填自增主键手写JDBC时要调用getGeneratedKeys或者插完再反查一次。扣库存的SQL记得加条件where stock quantity然后判断影响行数为0说明库存不足直接抛异常让事务回滚。这种写法比先select再update安全也更容易拿到高分因为它把并发场景考虑进去了。答这类题还有一个容易忽略的点金额字段的类型。写题时用int表示金额会丢小数点面试和考试都习惯用decimal(10,2)如果卷子上已经给了表结构跟着走就好不要自作主张改成double。3.3 配置文件里的固定考点web.xml、applicationContext.xml关键节点每次考试结束总有人遗憾说“代码写对了就是忘了配XX”。配置文件是最容易拿也最容易丢的分。老式JavaEE考web.xmlSSM考applicationContext.xmlSpring Boot考application.properties。把三类文件的关键节点背熟相当于把送分题全收进兜里。先看web.xmlServlet课设几乎必配核心节点是servlet映射和过滤器servlet servlet-nameloginServlet/servlet-name servlet-classcom.exam.servlet.LoginServlet/servlet-class /servlet servlet-mapping servlet-nameloginServlet/servlet-name url-pattern/login/url-pattern /servlet-mapping filter filter-nameencodingFilter/filter-name filter-classorg.apache.catalina.filters.SetCharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param /filter filter-mapping filter-nameencodingFilter/filter-name url-pattern/*/url-pattern /filter-mappingfilter的url-pattern是/*不是/login很多考生写错导致除了登录接口之外其他页面中文全乱。如果题目不允许用Tomcat自带的过滤器类自己写一个Filter实现类也可以在doFilter里setCharacterEncoding(UTF-8)再chain.doFilter效果一样。写的时候注意servlet-class必须是完整类名带包名漏掉包名是报ClassNotFoundException的高发原因。Spring Boot的配置就短很多期末难度下只要写对连接串和端口就够server.port8080 spring.datasource.urljdbc:mysql://localhost:3306/shop?useSSLfalseserverTimezoneAsia/Shanghai spring.datasource.usernameroot spring.datasource.password123456 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver这里容易翻车的是serverTimezone。新版MySQL驱动要求时区参数不写会出现各种奇怪的连接失败。备考时记住一句话凡是看到“The server time zone value”开头的报错去配置里加serverTimezoneAsia/Shanghai比重启十次都管用。如果考的是SSM把这几行搬到applicationContext.xml的数据源bean里逻辑完全一样只是格式不同。还有一类笔试题喜欢考“配置文件的加载顺序”比如Spring Boot的application.yml和application.properties同时存在时哪个生效、外置配置和打包配置哪个优先级高。期末题一般不会卡这么深你只要记得“外置配置优先于打包配置”就够应付绝大多数考题。4. 上机考试怎么练本地环境搭建与十分钟自测流程4.1 搭一个最小可跑的复习环境JDK、Tomcat、MySQL的版本匹配上机考试最怕的不是不会写而是环境起不来。我见过太多学生在考场里花40分钟折腾Tomcat最后连一个页面都没访问到考的全省了。复习阶段就要把自己机器配成和考场一致的环境版本匹配是有讲究的JDK 8配Tomcat 9、MySQL 5.7或8.0是目前比较稳的组合。JDK 17配老版本Tomcat启动时经常报模块相关错误不要在这个事上赌运气。按顺序装JDK配好JAVA_HOME和PATHMaven如果考SSM就装MySQL记得设root密码并记录最后解压Tomcat。装完后命令行验证java -version mvn -version mysql -uroot -p分别确认JDK版本、Maven版本和数据库连接。三个命令能过环境就稳了一半。接着启动Tomcat# Linux/Mac 解压后启动 apache-tomcat-9.0.xx/bin/startup.sh # Windows 运行 bin/startup.bat # 验证浏览器访问 http://localhost:8080/如果Tomcat启动一闪而过多半是JAVA_HOME没配好如果MySQL连不上检查3306端口是否被占用。复习阶段把这些坑全踩完考场上就只剩写代码这一件事。还有一个实用习惯把这三个验证命令存成txt放桌面考试时先跑一遍环境状态一目了然。4.2 十分钟自测流程启动、打包、部署、跑通主流程上机考试的节奏比代码能力更重要。我建议把“自测流程”练成本能不管题目是什么先保证一个最小可运行的demo能跑通再往里面加功能。这等于给自己留一粒后悔药哪怕最后功能没写完至少有一个能演示的版本可以交差。以IDEA加Maven为例自测流程固定如下# 1. 确认 MySQL 已启动库表存在 mysql -uroot -p -e show databases; # 2. 清理并打包跳过测试 mvn clean package -DskipTests # 3. Spring Boot 项目直接启动 mvn spring-boot:run # 4. 验证主流程 curl -I http://localhost:8080/user/login如果考的是传统SSM把第三步换成“把war包丢进Tomcat的webapps目录再启动Tomcat”。注意先看target目录下war包是否生成成功很多报错是因为打包时测试类没过用-DskipTests跳过即可那不是你代码的问题。curl -I只拿响应头看返回的状态码是200还是404比开浏览器快。如果你用的是IDEA图形界面等效的操作是点绿色运行按钮但命令行方式更接近考场的真实环境。自测时按“登录到列表到增删改”的顺序跑主流程每跑通一个功能就在纸上打个勾。中途报错先看控制台最后5行的异常类型不要从第一行开始读——Java的异常堆栈是倒着看的Caused by那一行才是根源。这个习惯能帮你省下大量排错时间也能避免越改越慌。注意上机考试时不要把时间花在美化页面上考官看的是功能和代码结构。Bootstrap样式能省就省留时间检查事务和边界。4.3 代码格式与项目结构不写注释也能过关的目录规范有一种说法是“上机考试不写注释扣分”其实判卷没这么死板。相比注释老师更看重组件的分包结构。一个controller、service、dao、entity分得清清楚楚的工程哪怕注释少也比把所有类堆在默认包里的工程印象分高。规范的目录长这样src/main/java/com/exam/ controller/ # 接收请求做参数校验 service/ # 业务逻辑事务边界 dao/ # 数据库操作 entity/ # 实体类对应表结构 src/main/resources/ application.properties包名建议用com.exam或课程代码不要放默认包。类名大驼峰方法名小驼峰变量名用英文不要用拼音缩写。这些不是加分项而是上机考试的保底项一眼就能看完的东西别在这种地方失分。平时练习就按这个目录建工程期末复习这一周正好把手里的代码规范化一举两得。还要养成一个习惯写完一个类就顺手格式化一下快捷键IDEA里是CtrlAltL把缩进和空行理清楚。很多老师上机判卷时是直接拖到浏览器里看源码的代码格式整齐第一印象就好。如果时间实在紧张至少保证关键方法前有一行注释说明“这个方法干什么”比满屏注释更实用。5. JavaEE期末复习避坑五个翻车现场与排查顺序5.1 现象本地能用一部署到Tomcat就404本地IDEA里直接运行能访问打包成war丢到Tomcat的webapps目录后全部404。原因是访问路径没带上项目名IDEA里用的是application contextTomcat里默认用war包名。解决方法是把访问地址从localhost:8080/login改成localhost:8080/项目名/login或者把war包改名为ROOT.war后清空原来的ROOT目录再部署就能用根路径访问。考场上遇到这种问题先看地址栏再想代码通常两分钟就能定位。5.2 现象报错第一行是NullPointerException翻到最后一行才是真凶上机排错最常见的误区是死盯着第一行异常看。Java的异常堆栈里如果业务层把异常包装后又抛出第一行只是表象往上很可能是service层的方法调用往下翻“Caused by”才是最初的根因。看到一个NPE不要急着在报错行找语法问题先定位是哪个对象没初始化——多半是某个Service没注入就直接用了或者DAO返回了null但没有判空。养成看完整堆栈的习惯比赌运气改代码靠谱得多。5.3 现象加了Transactional注解事务就是不回滚方法上明明写了Transactional故意抛异常后数据还是写进去了这是框架题每年必有人踩的坑。原因是Spring的事务默认只对RuntimeException回滚对checked异常不回滚。解决方法是把异常类改成RuntimeException的子类或者在Transactional上显式写rollbackFor Exception.class。笔试题里如果问“为什么事务没生效”这个点就是标准答案上机时真遇到了改注解属性就能解决不需要动业务代码。5.4 现象页面中文没问题存进数据库后变成问号页面、Servlet、MySQL三处编码只要有一处没统一中文就会乱。排查顺序是固定的先看页面和form标签的提交编码再看Servlet或过滤器有没有setCharacterEncoding(UTF-8)最后看MySQL连接串里有没有characterEncodingUTF-8、表字符集是不是utf8mb4。这三处都对了乱码基本消失。还有一种隐蔽情况是MySQL连接串里改了编码但没改表结构用show create table看看表的default charset表还是latin1就单独改表。5.5 现象考场上越改越错最后交了一个跑不起来的版本紧张之下很多人不是死在不会写而是死在不该改的地方强行改。运行时发现一个参数名拼错了改来改去连带着把别的正常代码也改坏了最后交上去的版本比改之前还差。应对方式是给自己定一个节奏每改完一处立刻重新编译和部署验证一次保证改一步、跑一步。这个习惯比一次改五处再一起测高效得多也更容易留下一个可用版本。如果时间不够宁可交一个功能少但能跑的版本也不要交一个功能多但完全启动不了的版本。6. 考前一晚的收尾方法把题库变回查漏清单6.1 刷题的两个阶段先按知识点刷再按真题时间刷考前一晚时间有限不建议从头到尾翻题库。第一遍按第2章的三层结构过Servlet部分看转发重定向和作用域题型持久层过连接和事务框架部分过注解和配置。第二遍只做第一遍犹豫过的题把每道题的错点单独标出来。这两个阶段的顺序不能反先按时间模拟容易陷入“会的反复做、不会的跳过”的舒适区查漏效果差。先按知识点扫一遍薄弱环节会非常明显。6.2 用一页纸把易错点按报错信息归档把复习过程中遇到的每个报错信息写成一行格式是“报错关键词→原因→修复动作”比如时区错、驱动找不到、表不存在、端口占用这类高频问题。考前不用再翻整套课件只看这页纸。上机考试时遇到问题先从这页纸里找对应的报错线索通常几分钟就能定位。我见过太多人倒在JavaEE期末不是知识量不够而是复习方式出了问题把题库当读物看眼睛会了手不会。所以最后一晚请给自己定一个硬指标——至少亲手写三遍登录题、完整走一遍订单事务的代码不要问为什么写就是了。等你在考场里真正跑通那个项目你会明白当初让你纠结的forward和sendRedirect到底区别在哪。希望这篇笔记能在你需要的时候帮到你祝过关。本文还有配套的精品资源点击获取