ARTICLE DETAIL

资讯详情

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

Java Web期末复习攻略:Servlet生命周期、JSP内置对象与JDBC考点全解析

Java Web期末复习攻略:Servlet生命周期、JSP内置对象与JDBC考点全解析 又到期末Java Web 这门课怎么复习才不迷路我先说个结论这门课跟纯 Java 或者数据结构不一样它不是靠背概念就能拿分的。你既要记住 Servlet 生命周期、JSP 九大内置对象这种默写类考点还得能手写 JDBC 步骤、能分析 request 和 response 的区别甚至给你一个需求你得能画出 MVC 的执行流程。很多同学平时照着网课敲代码很顺一到考试发现选择题四个选项全是好像都对简答题不知道从哪里答起。这篇文章就把我这几年带复习总结出来的 Java Web 期末重点、常见题型、答题套路和踩坑清单一次性整理出来适合期末突击也适合考前最后两天查漏补缺。1. 课程定位与复习规划先知道考什么再打开书期末复习最怕的就是打开课本从第一章开始翻翻到第三周就放弃了。Java Web 这门课的考点其实是高度收敛的翻来覆去就围绕浏览器发请求、服务器处理、把结果送回浏览器这条主线展开。先把这门课的整体知识框架搭起来再针对性地复习效率至少翻一倍。1.1 这门课到底在考什么一张知识点地图Java Web 课程的知识体系通常可以拆成六大块Web 基础概念HTTP、URL、B/S 架构、JSP 与 Servlet、四大作用域与九大内置对象、Cookie 与 Session、JDBC 数据库访问、以及综合项目中的 MVC 分层。有学校还会考到 Filter 过滤器、Listener 监听器和 EL/JSTL 表达式这几块虽然内容多但考的深度一般不高主要以选择题和简答题为主。这张地图你需要记到什么程度我给你定个标准考试时给你一个概念你能在 10 秒内说出它属于哪一块以及它跟相邻概念的核心区别是什么。比如提到 Session你要立刻想到服务端技术、依赖 Cookie 或 URL 重写、存用户登录状态提到 Filter立刻想到在请求到达 Servlet 之前做拦截处理典型场景是登录验证和字符编码设置。有了这种条件反射考场上的选择题和填空题基本就稳了。1.2 复习顺序与时间分配按考频而不是按章节我见过太多同学把时间浪费在 JSP 页面的 HTML 标签写法上结果最值钱的 Servlet 生命周期和 Session 原理反而没吃透。期末复习的时间分配我强烈建议按考频来排优先级而不是按课本目录顺序。一般来说Servlet 生命周期、请求响应流程、作用域与 Session/Cookie 这三块合起来能占到 40% 以上的分值是绝对的复习重点JDBC 和环境配置代码占 20% 到 30%JSP 语法、指令、EL 表达式占 20%Filter、Listener 等拓展内容占 10% 左右有余力再刷。这里有一个很实用的复习节奏先花一个晚上把 Servlet 和 JSP 的概念死记下来再用一个下午把 JDBC 标准步骤和各种作用域的区别理解透最后留一天做综合题的思路练习比如给你一个用户登录注册的需求你要能说清楚 JSP 页面发什么请求、Servlet 怎么接、Service 和 DAO 层怎么拆、Session 在哪里处理。按这个节奏走不管考试出题风格怎么变你手里都握着主动权。2. 高频理论基础这些概念不背熟选择填空直接白给理论考点虽然枯燥但它是整张试卷里最容易拿分的部分。问题在于这部分知识点琐碎各种区别对比特别容易绕晕。我用这些年批改试卷看到的高频错误把最容易考也最容易错的知识点逐个拆开讲。2.1 Servlet 生命周期与请求处理流程最重要的 5 分没有之一Servlet 生命周期是这门课当之无愧的必考题王不管是选择题、填空题、简答题还是程序分析题它都有出镜机会。它的完整过程是三句话容器只创建 Servlet 的一个实例第一次请求到达时调用 init() 完成初始化之后每次请求都由 service() 接收并分发到 doGet() 或 doPost()容器卸载前调用 destroy() 释放资源。我改作业时发现一个高频错误很多同学以为每次请求都会创建新 Servlet 实例这是不对的。Servlet 在容器中是单例的多线程并发访问同一个实例的成员变量就会产生线程安全问题。考试如果问你多个请求同时访问 Servlet 的实例变量是否安全标准答案是不安全因为 Servlet 默认是单例多线程模式。另外还要记住get 请求和 post 请求本质上是 service() 方法内部根据请求方式去调用对应的 doXxx() 方法不是两个独立的生命周期。把这条线理清楚相关的改错题和选择题都能直接秒选。2.2 JSP 九大内置对象与四大作用域范围一张表解决 90% 的题JSP 九大内置对象是期末试卷的常客尤其是 request、response、session、application、out 这几个。出题方式一般是给你一个内置对象让你选它的作用范围或者反过来给你场景让你选对象。应对方法很简单把四大作用域的对比表背下来几乎所有的题都能覆盖到。作用域对象范围说明典型场景pageContext当前 JSP 页面内有效页面上数据的临时传递request同一次请求范围内有效请求转发可传递表单提交后的数据对比、请求参数传递session同一个会话一个浏览器内有效用户登录状态、购物车数据application整个 Web 应用内有效所有用户共享网站全局访问计数、全局配置信息这里有一个高频混淆点请求转发和重定向到底哪个能取到 request 里的值答案是只有请求转发能拿到。因为重定向是浏览器重新发起一次新请求旧 request 对象已经销毁了而请求转发是服务器内部把请求转给另一个组件全程还是同一个 request。每次考到 session 和 request 的区别总有一批同学在这里翻车说实话挺可惜的。2.3 Cookie 与 Session 的相爱相杀记住登录状态靠什么Cookie 和 Session 的区别也是期末考试的钉子户考点。一句话总结Cookie 存在浏览器端Session 存在服务器端。Session 的常见实现方式就是服务器创建 Session 对象后把 sessionId 通过 Cookie 发给浏览器下次请求时浏览器把 sessionId 带回来服务器据此找到对应的 Session。所以 Session 依赖 Cookie 是通过 sessionId 这个标识实现的如果浏览器禁用了 CookieSession 还可以通过 URL 重写来继续工作这个点在简答题里非常容易考。我建议大家用一个真实场景来辅助记忆在论坛登录成功后服务器给当前浏览器发了一张会员卡Cookie卡上写着你的会员编号sessionId服务器的花名册里存着这个编号对应的会员详情Session 数据。下次你来论坛只要把会员卡递给前台请求中携带 Cookie前台扫一眼编号就知道你是谁。会员卡丢了怎么办重新登录一次就行。这个类比在考场上一想起来答题思路立刻清晰。2.4 JDBC 数据库操作六步法程序填空题的标准套路Java Web 考试通常会给一段数据库操作代码让你填空或者指出错误。只要掌握 JDBC 的六步固定套路这种题几乎白送分。六步分别是加载驱动、获取连接、创建 Statement/PreparedStatement、执行 SQL、处理结果集、关闭资源。每一步都有对应的类和接口连环记忆DriverManager 负责获取连接Connection 负责连接状态Statement 负责执行 SQLResultSet 负责存储查询结果。这里有两个我特别提醒的细节。第一SQL 注入的防范手段是使用 PreparedStatement 而不是 Statement因为它使用预编译机制参数用占位符 ? 代替传值时通过 setString 等方法绑定SQL 结构不会因为用户输入而被改变。第二关闭资源的顺序必须跟打开顺序相反先关 ResultSet再关 Statement最后关 Connection而且这一步要放在 finally 块里或者使用 try-with-resources 语法让 JVM 自动关闭。期末试卷如果出代码阅读题十有八九会在这两个点做文章。3. 实操类考点目录结构、web.xml 配置与 Tomcat 部署这一章说的是能动手的考点。虽然上机考试未必会直接考环境搭建但试卷里经常出现给你一个项目截图让你说明每个目录的作用或者给你一段 web.xml 配置让你写出它实现了什么功能。尤其是JSP 编译后生成的 Java 类去哪里看这个问题每年都有学生被问到却很少有人真的去 Tomcat 目录翻过。3.1 Web 项目的标准目录结构每个文件夹的职责必须能默写Java Web 项目标准目录结构是实操题的重灾区但同时也是送分题只要认真记过就不会错。核心结构我按从外到内的顺序说一下项目根目录下最常见的是 src 目录存放 Java 源码和 WebContent/webapp 目录存放 Web 资源。WebContent 里面必须有 WEB-INF 文件夹WEB-INF 下面必须有 web.xml 部署描述文件。这里面有三个细节值得注意第一WEB-INF 目录下的内容对浏览器是隐藏的用户不能通过 URL 直接访问它里面的文件这是安全设计的体现。第二编译后的 class 文件默认输出到 WEB-INF/classes 目录项目依赖的第三方 jar 包放在 WEB-INF/lib 目录。第三JSP 页面直接放在 WebContent 根目录下或任意子目录中但绝对禁止直接把 JSP 放进 WEB-INF 里让浏览器直接访问除非你通过 Servlet 转发的方式访问它。考试中常见的改错题就喜欢把 jsp 文件的位置和 WEB-INF 的访问规则混在一起考平时记准确了才不会中招。3.2 web.xml 配置核心节点一个 servlet 映射的完整写法web.xml 是 Java Web 项目的总配置文件期末考试最常见的考法是让你写出 Servlet 的映射配置或者给一段配置让你说明访问路径。我建议你把下面这段代码背得滚瓜烂熟考试直接照葫芦画瓢就行?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 display-nameDemoWeb/display-name servlet servlet-nameLoginServlet/servlet-name servlet-classcom.demo.web.LoginServlet/servlet-class /servlet servlet-mapping servlet-nameLoginServlet/servlet-name url-pattern/login/url-pattern /servlet-mapping welcome-file-list welcome-fileindex.jsp/welcome-file /welcome-file-list /web-app这里解释一下这段代码的含义。servlet 节点先注册一个逻辑名称 LoginServlet并告诉容器它对应的类在哪servlet-mapping 节点把这个逻辑名称与外部访问路径 /login 绑定。也就是说浏览器访问 http://localhost:8080/项目名/login 时容器会找到 LoginServlet 这个类来执行。注意 servlet-mapping 里的 url-pattern 必须以 / 开头这个斜杠一丢运行直接 404。welcome-file-list 配置的是访问项目根路径时默认打开的页面考试偶尔会在填空题里问一句默认欢迎页配置在哪很多人平时没注意就卡住了。3.3 部署到 Tomcat 后如何查看 JSP 编译生成的 Java 类JSP 本质上就是一个 Servlet这句话很多学生背得很熟但一到那 JSP 页面对应的 Java 代码在哪就答不上来了。实际开发里如果想看 JSP 被 Tomcat 编译成的 Servlet 源码用来排查页面报错的深层原因路径是有固定规律的。在 Tomcat 的 work 目录下找到 Catalina 目录进入对应的 localhost 主机目录再进入当前项目名的目录就能看到 org/apache/jsp 之类的包层级结构里面就是 JSP 编译后的 .java 文件和 .class 文件。比如你的项目名是 mywebTomcat 装在你的开发电脑上你就去 Tomcat 安装目录下的 work/Catalina/localhost/myweb/org/apache/jsp 目录找以 _jsp.java 结尾的文件。这个文件打开后你会一目了然地看到 JSP 的 out.write() 输出逻辑HTML 静态部分变成了 out.write 的字符串内容%% 脚本片段变成了 _jspService() 方法里的 Java 代码。考试如果考到JSP 编译后的 Java 文件位于哪个目录答案为 work 目录下的项目对应目录如果考到JSP 是谁在什么时候编译的答案为 JSP 容器Tomcat在第一次被访问时将 JSP 翻译成 Java 源文件再编译成 class。4. 常见考点题型套路选择题陷阱、简答题踩分点和代码题模板这部分是今天这篇文章的重头戏。光懂知识点还不够你得知道考场上每种题型到底想让你答什么。我把 Java Web 期末考试最常见的几类题型和对应的答题技巧拆开讲透每一条都是可以直接上手的套路。4.1 选择题与填空题的高频陷阱汇总选择题最忌讳的是背了概念但没辨析易混点。我整理了四个高频陷阱命中率极高。第一关于 Servlet 实例数量的陷阱。题干说一个 Servlet 被 10 个用户同时访问请问服务器创建了几个 Servlet 实例正确答案是 1 个不是 10 个。Servlet 是单例多线程创建实例的时机是第一次请求到达时或启动时不是每次请求都创建。第二关于请求转发的路径写法陷阱。转发时写的是项目内部路径比如 forward(/index.jsp)不需要写项目名而重定向 sendRedirect( index.jsp) 这类写法通常需要带上下文路径。第三关于 GET 和 POST 的适用范围陷阱。地址栏直接输入 URL、点击超链接、默认方式都是 GET表单显式设置 methodpost 或者 AJAX 设置 POST 才是 POSTPOST 更安全、能传更多数据而且参数不会出现在 URL 上。第四关于 out.print 和 out.write 的区别虽然日常用起来差别不明显但原理题喜欢考print 对各种类型做了重载write 偏向于字符流输出。填空题的套路其实更简单它一般从定义里挖空。比如HttpServletRequest 对象用于获取客户端请求信息HttpServletResponse 对象用于向客户端输出响应信息Session 在服务器端保存用户状态Cookie 在客户端保存用户状态。这类空只要你把概念中的关键词位置记准基本不会丢分。4.2 简答题如何写出踩分点以 Cookie 与 Session 区别为例简答题最忌长篇大论写不到点上。判卷是按照踩分点给分的你的答案里必须出现标准答案里的关键词比如服务器端客户端安全性存储容量生命周期。我以简述 Cookie 与 Session 的区别这道经典题为例给你一条可以直接套用的答题结构。先答存储位置Cookie 存放在客户端浏览器Session 存放在服务器端。然后答安全性Cookie 明文存储在本地容易被篡改和窃取Session 数据在服务器相对安全。再答存储容量单个 Cookie 一般不能超过 4KBSession 理论上可以存更多数据。最后答生命周期Cookie 可以设置过期时间达到时间后浏览器自动删除Session 在默认的 30 分钟无操作后失效或通过 invalidate() 方法主动销毁。回答时用分点、用短句列出位置、安全、容量、生命周期这四个维度比写一大段话要好得多判卷老师一眼就能看到你的得分点。类似的简答题还有描述 Servlet 生命周期POST 和 GET 的区别请求转发与重定向的区别简述 MVC 模式中的三层职责每一道题都可以按核心定义 分维度对比 一句话场景总结的结构来准备。你甚至可以自己把答案压缩成 3 到 4 个小标题考场上直接展开成句比现场临场组织语言稳得多。4.3 程序设计题标准思路登录注册和列表展示必须会画流程程序设计题通常不会要求你手写完整代码个别学校除外而是要求你写出实现思路、关键代码片段或者补全代码。不管考的是登录注册、用户列表还是购物车核心都是 MVC 三层结构。我拿用户登录这个最经典的场景给你梳理一下完整得分点。三层结构分别是View 层是一个 login.jsp 页面提供一个 form 表单action 指向 LoginServletmethod 用 postController 层是 LoginServlet接收参数后调用业务层根据结果决定转发到成功页还是带着错误提示返回登录页Model 层包含业务逻辑Service和数据库操作DAODAO 里用 JDBC 查数据库判断用户名密码是否匹配。这道题最关键的答题细节有三个。第一获取参数用 request.getParameter(username)要注意参数名和表单 name 属性完全一致。第二防止 SQL 注入要用 PreparedStatement并用占位符 setString 传入参数。第三登录成功后把用户信息放进 Session 里例如 session.setAttribute(user, user)这样后续页面才能识别登录状态下次请求时用 session.getAttribute(user) 判断是否为空。如果你能在代码片段里把这三点写清楚程序设计题的分基本上都拿到手了。手写代码时还需要注意一些规范短句比如数据库连接的 URL 写成 jdbc:mysql://localhost:3306/数据库名加载驱动写 Class.forName(com.mysql.cj.jdbc.Driver)。这里容易踩坑的是一个老驱动版本 com.mysql.jdbc.Driver 现在已经被新的驱动类取代考试时以教材版本为准但新版驱动名是 com.mysql.cj.jdbc.Driver 这件事最好在答题时优先写新版更符合当下主流环境。5. 考试最容易踩的坑环境、异常和算法外的暗礁到了最后的复习阶段比学不会更让人崩溃的是明明会但考砸了。Java Web 考试有些坑跟代码逻辑无关是纯习惯和细节问题。我在这一节把最容易出现的几类问题做一个集中排查。5.1 编码、路径、classpath引起运行时崩溃的三大幕后黑手编码问题是 Java Web 初学者最大的隐性杀手。页面用 UTF-8代码用 GBK数据库用 latin1三个地方编码不一致页面上就会出现一堆乱码。考试里如果给你一个乱码现象让你排查原因答题思路通常围绕着保证页面编码、请求编码、响应编码和数据库编码统一来展开。具体写法就是设置 pageEncodingUTF-8、contentTypetext/html; charsetUTF-8、request.setCharacterEncoding(UTF-8)、response.setCharacterEncoding(UTF-8)四条一起上绝大部分中文乱码都能解决。路径问题则是 404 错误的根源。注意区分三种路径浏览器地址栏访问的外部路径要带上下文路径Servlet 里转发用的内部路径不带项目名重定向路径要不要带 contextPath 要看具体写法。classpath 问题常见表现是运行时报 ClassNotFoundException比如找不到 JDBC 驱动类说明 mysql-connector-java.jar 没有放进 WEB-INF/lib 目录。这类问题考试时不会真的让你调环境但会在改错题里出现你要能指出缺少 jar 包类名写错这类原因。5.2 经典异常速查表看到报错名称立刻知道问题方向我在批改上机作业时总结了一份出现频率最高的异常速查表考前背一遍看到异常名字心里就有底。异常/错误类型最常见原因排查方向404 Not Found访问路径错误、资源不存在、项目未部署检查 url-pattern 前后是否有斜杠、项目名是否写对500 Internal Server Error服务器代码抛异常查看日志的 StackTrace、检查空指针405 Method Not Allowed请求方式与 doGet/doPost 不匹配检查表单 method 与 Servlet 重写的方法ClassNotFoundException缺少相关 jar 包或类名写错检查 WEB-INF/lib、检查全限定类名NullPointerException对象未初始化优先审视 request.getParameter 返回 null 的处理SQLException数据库连接信息错误或 SQL 语法问题检查 URL、用户名、密码、SQL 语句顺便提醒最大的空指针来源是 request.getParameter 取到的值直接使用而没有判断 null。比如用户没填写某个输入项直接提交取回来的值就是 null直接调用 equals 就会 NPE。写代码时养成取参先判空的习惯考试代码片段题也能顺手体现这个亮点。5.3 考前快速自检清单最后这个清单是我自己考前必过一遍的你可以直接抄走。第一Servlet 生命周期四个方法的名字和作用顺序用中文默写一遍。第二九大内置对象默写不出来的话至少背熟 request、session、application、pageContext 四个。第三Cookie 与 Session 的区别能随口说出四个维度。第四JDBC 六步流程顺口说出每一步对应的接口或类。第五web.xml 里 servlet 和 servlet-mapping 节点的包含关系能画出来。第六JSP 编译后的 Java 文件所在路径能说出是在 Tomcat work 目录。在这里我想额外插一句这门课其实不靠天赋靠的是概念框架 动手验证的组合。很多学生复习到后面产生挫败感是因为总想着我还没准备好但课本上那些例子你只要亲手敲一遍再对着编译后的代码看一遍很多抽象的东西一下子就落地了。这也是为什么我一直建议大家去 work 目录里亲手找一次 JSP 编译后的 Java 类那种原来如此的感觉比背十遍概念都管用。
返回列表