JavaWeb第4章《Servlet基础》20道经典习题详解(附答案与解析)
摘要:本文系统整理了JavaWeb开发中第4章《Servlet基础》的20道典型习题,涵盖单选题、填空题、判断题、简答题及编程题,每题均提供标准答案与深度解析,帮助你夯实Servlet核心知识,备战考试或面试!
一、单选题(共5题)
1. 父类识别
题目:程序中创建了一个Servlet,该Servlet重写了其父类的doGet()和doPost()方法,那么其父类可能是()
A. RequestDispatcher
B. HttpServletResponse
C. HttpServletRequest
D. HttpServlet
✅正确答案:D. HttpServlet
🔍解析:只有HttpServlet类提供了doGet()和doPost()方法用于处理 HTTP 请求。其他选项均为接口或工具类,不能作为可继承并重写这两个方法的父类。
2. 继承关系判断
题目:LoginServlet是一个Servlet类,代码如下:
publicclassLoginServletextends___________{publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{…}publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{…}}下划线处应填写()
A. Servlet
B. HttpServlet
C. GenericServlet
D. Cookie
✅正确答案:B. HttpServlet
🔍解析:方法参数使用了HttpServletRequest和HttpServletResponse,这是HttpServlet的特征;而GenericServlet使用的是通用的ServletRequest/ServletResponse,不适用于 HTTP 方法细分。
3. 请求方式判断
题目:用户在浏览器地址栏中直接输入URL回车,控制台输出结果是?
publicclassServlet1extendsHttpServlet{publicvoiddoGet(...){System.out.println("get");}publicvoiddoPost(...){System.out.println("post");doGet(request,response);}}A. get
B. post
C. get post
D. post get
✅正确答案:A. get
🔍解析:浏览器地址栏访问默认发起GET 请求,因此只调用doGet(),输出 “get”;doPost()不会被执行。
4. POST请求处理方法
题目:HttpServlet类中,用来处理 POST 请求的方法是()
A. doHead
B. doGet
C. doPost
D. doPut
✅正确答案:C. doPost
🔍解析:HttpServlet为不同 HTTP 方法提供对应处理方法,doPost()专门用于处理 POST 请求。
5. 全局共享数据对象
题目:用于实现一个 Web 应用中所有 Servlet 共享数据的对象是()
A. HttpSession
B. ServletContext
C. ServletConfig
D. ServletRequest
✅正确答案:B. ServletContext
🔍解析:ServletContext代表整个 Web 应用上下文,其属性对所有 Servlet 可见,适合全局共享;其他对象作用域均小于整个应用(如 Session 仅限会话,Request 仅限单次请求)。
二、填空题(共6题)
6. 服务器内部跳转方式
题目:RequestDispatcher.forward()将请求传递给其他资源的方式称为____。
✅答案:请求转发
🔍解析:请求转发是服务器内部跳转,客户端无感知,地址栏不变,且可通过request共享数据。
7. HTTP响应封装接口
题目:Servlet API 中,专门用来封装 HTTP 响应消息的接口是____。
✅答案:HttpServletResponse
🔍解析:HttpServletResponse用于设置状态码、响应头、字符编码,并获取输出流发送响应体。
8. 客户端重新请求机制
题目:____指服务器让客户端重新向新 URL 发送请求。
✅答案:请求重定向
🔍解析:通过response.sendRedirect(url)实现,返回 302 状态码,客户端自动发起新请求,地址栏改变。
9. 自定义 Servlet 的父类
题目:自定义 Servlet 可继承____或HttpServlet。
✅答案:GenericServlet
🔍解析:GenericServlet是协议无关的抽象类,HttpServlet继承它并专用于 HTTP 协议。实际开发中通常直接继承HttpServlet。
10. Servlet 配置方式
题目:Servlet 配置方式有 web.xml 和 ____ 注解。
✅答案:@WebServlet
🔍解析:Servlet 3.0+ 支持注解配置,@WebServlet("/path")可替代 XML 配置。
11. Servlet 生命周期阶段
题目:Servlet 生命周期包括初始化、运行和____。
✅答案:销毁阶段
🔍解析:三阶段:init()→service()(含 doGet/doPost)→destroy()(仅调用一次)。
三、判断题(共5题)
12. 输出流互斥性
题目:getOutputStream()和getWriter()可同时使用。
✅答案:错
🔍解析:二者互斥!同时调用会抛出IllegalStateException。文本用PrintWriter,二进制用OutputStream。
13. ServletConfig 作用
题目:Tomcat 初始化 Servlet 时,会将配置信息封装到ServletConfig。
✅答案:对
🔍解析:ServletConfig包含<init-param>配置,可通过getInitParameter()获取。
14. @WebServlet 注解规则
题目:@WebServlet中value和urlPatterns不能共存。
✅答案:对
🔍解析:value是urlPatterns的简写,功能相同,二者不能同时使用,否则编译报错。
15. destroy() 调用次数
题目:destroy()方法会被调用多次。
✅答案:错
🔍解析:destroy()仅在 Servlet 被容器卸载(如应用停止)时调用一次,用于释放资源。
16. request.setAttribute() 功能
题目:ServletRequest.setAttribute()用于存储 name-object 对。
✅答案:对
🔍解析:该方法在单次请求范围内存储数据,常用于请求转发时传递信息。
四、简答题(共2题)
17. 常用 HTTP 状态码
题目:列举至少三个HttpServletResponse常用状态码及其意义。
✅参考答案:
200:请求成功404:未找到资源302:临时重定向(后续仍用原 URL)500:服务器内部错误400:客户端请求语法错误
🔍解析:这些是 HTTP 协议中最核心的状态码,覆盖成功、客户端错误、服务器错误和重定向场景。
18. 请求转发 vs 重定向
题目:简述请求转发与重定向的异同(至少3点)。
✅参考答案:
- 相同点:都能实现资源跳转。
- 请求次数:转发是一次请求一次响应;重定向是两次请求两次响应。
- 地址栏:转发不变;重定向变为新 URL。
- 数据共享:转发可通过
request共享数据;重定向不能。 - 跳转范围:转发只能跳转当前应用内资源;重定向可跳转外部站点。
🔍解析:选择依据:需隐藏路径/共享数据 → 转发;需刷新安全/跳外站 → 重定向。
五、编程题(共2题)
19. 输出中文 Servlet
题目:编写ChineseServlet,输出“JavaWeb程序设计任务教程”。
✅标准代码:
@WebServlet("/ChineseServlet")publicclassChineseServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");PrintWriterout=response.getWriter();out.println("JavaWeb程序设计任务教程");}}🔍关键点:必须设置charset=utf-8,否则中文乱码!
20. 访问次数统计 Servlet
题目:编写ShowTimesServlet,统计网站访问总次数。
✅标准代码:
@WebServlet("/ShowTimesServlet")publicclassShowTimesServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");ServletContextcontext=getServletContext();Integertimes=(Integer)context.getAttribute("accessTimes");if(times==null)times=0;times++;context.setAttribute("accessTimes",times);response.getWriter().println("<h1>网站访问次数:"+times+"</h1>");}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);// 统一处理}}🔍关键点:
- 使用
ServletContext存储全局计数器(应用级共享) - 注意空值判断与类型转换
doPost调用doGet避免重复逻辑
✅ 总结
本套习题全面覆盖了Servlet 核心概念,包括:
- 继承体系(
HttpServletvsGenericServlet) - 生命周期(init → service → destroy)
- 请求处理(doGet/doPost)
- 数据共享(
ServletContext/request) - 跳转机制(转发 vs 重定向)
- 响应处理(状态码、中文编码、输出流)
建议结合代码实践加深理解,祝你 JavaWeb 学习顺利!
JavaWeb第8章《JavaBean与JSP开发模型》18道经典习题详解(附答案与解析)
摘要:本篇系统梳理了 JavaWeb 第8章《JavaBean 与 JSP 开发模型》的全部 18 道典型题目,涵盖单选、填空、判断、简答及编程题,深入解析JSP Model1/Model2、MVC 架构、JavaBean 规范等核心知识点,助你夯实基础,轻松应对考试与项目开发!
一、单选题(共5题)
1. JSP Model2 中的视图实现
题目:JSP Model2 开发的系统中,实现视图的是( )
A. JSP
B. HTML
C. JavaBean
D. Servlet
✅正确答案:A. JSP
🔍解析:在 JSP Model2(即 MVC 模式)中,JSP 负责视图(View),用于展示数据;Servlet 充当控制器,JavaBean 扮演模型。
2. MVC 中负责展示数据的模块
题目:MVC 模式中用于负责与用户交互并展示模型中数据的模块是( )
A. 模型(Model)
B. 表示层(View)
C. 视图(View)
D. 控制器(Controller)
✅正确答案:C. 视图(View)
🔍解析:视图(View)是用户界面部分,负责将模型中的数据以可视化形式呈现给用户,并接收用户输入(通常通过表单等)。
3. JavaBean 规范判断
题目:以下Book类是否符合 JavaBean 规范?
publicclassBook{privatedoubleprice;publicdoublegetPrice(){returnprice;}publicvoidsetPrice(doubleprice){this.price=price;}}A. 符合
B. 不符合
C. 没有构造方法,所以不符合
D. 以上都不对
✅正确答案:A. 符合
🔍解析:该类满足 JavaBean 四大规范:① 公共类;② 私有属性;③ 提供 public 的 getter/setter;④ 编译器自动生成无参构造方法(未显式定义时默认存在)。
4. MVC 特点错误描述
题目:关于 MVC 设计模式的特点,错误的是( )
A. 有利于开发中的分工
B. 使程序结构的耦合性增强
C. 有利于组件的重用
D. 是当前主流设计模式之一
✅正确答案:B. 使程序结构的耦合性增强
🔍解析:MVC 的核心优势之一是降低耦合性,实现关注点分离。选项 B 表述错误,其余均为 MVC 的优点。
5. JSP Model2 中接收请求的组件
题目:在 JSP Model2 模型中,接收浏览器请求的是( )
A. JSP
B. JS
C. Servlet
D. JavaBean
✅正确答案:C. Servlet
🔍解析:在 Model2 中,Servlet 作为控制器(Controller),首先接收所有 HTTP 请求,处理业务逻辑后转发给 JSP 视图。
二、填空题(共5题)
6. JSP 两种开发模型
题目:Sun 公司为 JSP 提供了两种开发模型:JSP Model1 和 ___。
✅答案:JSP Model2
🔍解析:Model1 适用于小型项目(JSP + JavaBean),Model2 基于 MVC,适合大型应用。
7. JSP Model1 技术组合
题目:JSP Model1 采用 ___ 的技术,将页面显示和业务逻辑分开。
✅答案:JSP+JavaBean
🔍解析:Model1 中,JSP 页面调用 JavaBean 处理数据,实现初步的逻辑与视图分离,但控制流仍在 JSP 中。
8. JSP Model2 中控制器的实现
题目:JSP Model2 模型中,控制器由 ___ 实现。
✅答案:Servlet
🔍解析:Model2 = MVC:Servlet(Controller) + JSP(View) + JavaBean(Model)。
9. MVC 三大核心模块
题目:MVC 将程序分为模型、视图和 ___。
✅答案:控制器(Controller)
🔍解析:MVC 即Model-View-Controller,三者职责分明,协同工作。
10. 负责用户交互的部分
题目:___ 是负责应用程序中处理用户交互的部分。
✅答案:视图(View)
🔍解析:视图直接面向用户,负责输入输出交互,如网页表单、按钮、数据显示等。
三、判断题(共5题)
11. JSP Model1 是否等于 MVC?
题目:JSP Model1 采用 JSP+Servlet+JavaBean,就是 MVC。
✅答案:错
🔍解析:Model1 不使用 Servlet,仅 JSP + JavaBean,控制逻辑仍嵌在 JSP 中,不是标准 MVC。Model2 才是。
12. JavaBean 是否需要无参构造方法?
题目:JavaBean 需要有一个默认的无参构造方法。
✅答案:对
🔍解析:这是 JavaBean 规范强制要求,便于框架(如 JSP、Spring)通过反射实例化对象。
13. Model2 中 Servlet 和 JSP 的角色
题目:Model2 中,控制器由 Servlet 实现,视图由 JSP 实现。
✅答案:对
🔍解析:完全正确,这正是 JSP Model2 的标准架构。
14. JavaBean 属性是否必须私有?
题目:JavaBean 中的属性必须私有化。
✅答案:对
🔍解析:私有化(private)是封装性的体现,外部只能通过 getter/setter 访问,确保数据安全与一致性。
15. 控制器是否管理业务数据?
题目:控制器负责管理业务数据、定义访问控制及业务规则。
✅答案:错
🔍解析:模型(Model)才负责管理业务数据和规则;控制器(Controller)仅负责接收请求、调用模型、选择视图。
四、简答题(共1题)
16. JavaBean 规范有哪些?
题目:简述 JavaBean 规范。
✅标准答案:
- 必须是一个公共类(public class);
- 必须提供一个公共的无参构造方法(可由编译器默认生成);
- 属性必须私有化(private);
- 为每个属性提供公共的 getter 和 setter 方法(命名规范:
getXXX()/setXXX()); - 建议实现
java.io.Serializable接口,以便支持序列化(如会话保存、网络传输)。
🔍解析:这些规范使得 JavaBean 成为“可重用组件”,能被 JSP 标准动作(如<jsp:useBean>)、Spring、Struts 等框架无缝集成。
五、编程题(共2题)
17. 使用<jsp:getProperty>显示 Student 信息
题目:编写StudentJavaBean,并在stuInfo.jsp中使用<jsp:getProperty>显示属性。
✅参考实现:
Student.java
packagebean;publicclassStudent{privateStringname;privateintage;publicStudent(){}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}stuInfo.jsp
<%@ page contentType="text/html;charset=UTF-8" %> <jsp:useBean id="stu" class="bean.Student" scope="page"/> <jsp:setProperty name="stu" property="name" value="张三"/> <jsp:setProperty name="stu" property="age" value="20"/> <h2>学生信息:</h2> 姓名:<jsp:getProperty name="stu" property="name"/><br> 年龄:<jsp:getProperty name="stu" property="age"/>🔍关键点:
- 使用
<jsp:useBean>创建或查找 Bean <jsp:setProperty>设置属性值<jsp:getProperty>获取并输出属性值
18. 用户信息录入(结合表单与 JavaBean)
题目:使用<jsp:setProperty>接收参数,<jsp:getProperty>显示用户信息。
✅参考实现:
User.java(标准 JavaBean)
packagebean;publicclassUser{privateStringusername;privateStringemail;publicUser(){}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}}input.html(用户输入页面)
<formaction="showUser.jsp"method="post">用户名:<inputtype="text"name="username"><br>邮箱:<inputtype="email"name="email"><br><inputtype="submit"value="提交"></form>showUser.jsp(处理并显示)
<%@ page contentType="text/html;charset=UTF-8" %> <jsp:useBean id="user" class="bean.User" scope="request"/> <jsp:setProperty name="user" property="*"/> <!-- 自动匹配同名参数 --> <h2>用户信息如下:</h2> 用户名:<jsp:getProperty name="user" property="username"/><br> 邮箱:<jsp:getProperty name="user" property="email"/>🔍关键点:
- 表单
name属性必须与 JavaBean 属性名一致 <jsp:setProperty property="*"/>自动将请求参数赋值给同名属性- 无需手动调用 setter,简化代码
✅ 总结
本章核心围绕JSP 开发模型演进与JavaBean 规范应用:
| 概念 | Model1 | Model2 (MVC) |
|---|---|---|
| 结构 | JSP + JavaBean | Servlet + JSP + JavaBean |
| 控制流 | 在 JSP 中 | 由 Servlet 统一控制 |
| 适用场景 | 小型、简单项目 | 中大型、可维护项目 |
同时,JavaBean 作为模型载体,其规范(无参构造、私有属性、getter/setter、Serializable)是实现组件化、解耦和框架集成的基础。
掌握这些内容,不仅能应对考试,更能为后续学习 Spring MVC、MyBatis 等现代框架打下坚实根基!