当前位置: 首页 > news >正文

JavaWeb期末速成 样题篇

关键词: MVC 、Servlet 、 EL表达式 、 Session 、 作用域(Scope) 、 表单 、 doGet() 、request 、 JSP 、 转发与重定向


MVC

MVC基本概念

MVC(Model-View-Controller)是一种软件架构模式,将应用程序分为三个核心组件:

组件说明
Model处理业务逻辑和数据持久化,代表应用程序的数据和业务规则
View用户界面层,负责数据的展示和用户交互
Controller接收用户输入,协调Model和View之间的交互

MVC工作流程

User Controller Model View 发起HTTP请求 调用业务逻辑 返回处理结果 转发数据 渲染响应页面 User Controller Model View

例题

MVC只能用Servlet/JSP实现(×)

MVC是一种设计模式,可以用多种技术实现:

  • Java:Spring MVC(Controller)+ JSP/Thymeleaf(View)
  • PHP:Laravel框架
  • JavaScript:Angular/React+Vue(前端MVC)
  • Python:Django MTV模式(本质是MVC变体)

在MVC设计模式中,( )负责接收客户的请求数据
A.JavaBean           B.Servlet           C.HTML         D.JSP
正确答案:B.Servlet
解析

  • Servlet是Java Web中标准的控制器组件
  • 现代框架中可能是Spring的@Controller或@RestController
  • JSP(D)本质属于View层,虽然能接收请求但不符合MVC规范

Servlet

1. Servlet 基础概念

Servlet(Server + Applet)是运行在 Web 服务器(如Tomcat) 上的 Java程序,用于 处理HTTP请求并生成动态响应

  • 核心作用
    • 接收客户端(浏览器)的请求(HttpServletRequest)/接受客户的请求数据。
    • 处理业务逻辑(如查询数据库)。
    • 返回响应(HttpServletResponse,如HTML/JSON)。

2. Servlet 核心方法

方法说明
init()Servlet初始化时调用(仅一次)
service()根据请求类型(GET/POST)调用doGet()doPost()(由容器自动处理)
doGet()处理HTTP GET请求
doPost()处理HTTP POST请求
destroy()Servlet销毁时调用(服务器关闭或Servlet被移除)

3. Servlet 生命周期

生命周期阶段

  1. 加载与实例化
    • Web容器(如Tomcat)加载Servlet类并调用无参构造器创建实例。
  2. 初始化(init()
    • 调用init(ServletConfig config)方法,仅执行一次(用于加载资源)。
  3. 处理请求(service()doGet()/doPost()
    • 每次请求都会调用service()方法,并根据请求类型分发到doGet()doPost()
  4. 销毁(destroy()
    • 服务器关闭时调用,释放资源(如数据库连接)。

4. 请求处理与作用域

request vs sendRedirect

  • request.setAttribute() + 转发(forward
    • 数据在同一个请求链中共享(可跨Servlet/JSP)。
  • response.sendRedirect()
    • 发送302重定向,新建请求,原request中的数据丢失。

5. 过滤器(Filter)

过滤器的作用

  • 请求到达Servlet前响应返回客户端前执行预处理(如权限检查、日志记录)。
  • 与Servlet的区别
    • Filter不直接处理请求,而是对请求/响应进行过滤。
    • Servlet是请求的最终处理者。

例题

Servlet的doGet()和doPost()方法的两个参数类型是:

  • HttpServletRequest和HttpServletResponse 。

Servlet的主要作用是获取请求参数和跳转页面。( √ )

  • 正确。Servlet的核心功能是:
    • 通过request.getParameter()获取请求参数。
    • 通过response.sendRedirect()RequestDispatcher实现页面跳转。
    • 除此以外,Servlet还能处理业务逻辑、生成动态内容等。

JSP页面的本质也是Servlet。( √ )

  • 正确。JSP在部署时会被Web容器(如Tomcat)编译成Servlet(Java类)

给定下面HTML代码:

<html><body><a href=”/servlet/MyServlet”>Click Me</a></body></html>

当用户单击“Cliick Me”链接时,将调用Servlet的( A )方法。
A.doGet() B.doPost() C.Get() D.Post()

  • 正确答案:A. doGet()
  • 解析:<a>标签默认发起的是HTTP GET请求,因此会调用Servlet的doGet()方法。POST需要通过<form method="post">触发。

下面有关Servlet的描述错误的是( C )。
A.一个Servlet就是一个Java类
B.Servlet是位于Web服务器内部的服务器端的Java应用程序
C.Servlet可以由客户端的浏览器解释执行
D.加载Servlet的Web服务器必须包含支持Servlet的Java虚拟机

  • 正确答案:C. Servlet可以由客户端的浏览器解释执行
  • 解析:Servlet在服务器端由JVM执行,浏览器只能接收响应结果(如HTML),无法解释Servlet代码。

Servlet的生命周期由一系列事件组成,把这些事件按先后顺序排列,正确的是( B )。
A.加载类,实例化,请求处理,初始化,销毁
B.加载类,实例化,初始化,请求处理,销毁
C.实例化,加载类,初始化,请求处理,销毁
D.加载类,初始化,实例化,请求处理,销毁

  • 正确答案:B. 加载类→实例化→初始化→请求处理→销毁
  • 关键步骤:
    1. 容器加载Servlet类(.class文件)。
    2. 实例创建(调用无参构造器)。
    3. 初始化(调用init(),仅一次)。
    4. 处理请求(多次调用service()doGet()/doPost())。
    5. 销毁(调用destroy()释放资源)。

给定一个Servlet的doGet()方法中的代码片段,如下:

request.setAttribute(“name”,”张三”);
response.sendRedirect(“http://localhost:8080/helloweb/my-servlet”);

那么在my-servlet中可以使用( D )方法把属性name的值取出来。

A.String name = request.getAttribute(“name”);
B.String name = (String)request.getAttribute (“name”);
C.Object name = request.getAttribute (“name”);Get()
D.无法取出来

  • 正确答案:D. 无法取出来
  • 解析:
    • sendRedirect()是客户端重定向(响应码302),会发起新的请求,原请求的request对象及其属性已失效。
    • 若需传递数据,可用session或追加参数到URL(如?name=张三)。

以下关于过滤器的说法错误的是( D )。

A.是向Web应用程序的请求和响应处理添加功能的Web服务组件
B.Filter不是一个Servlet
C.能够在一个请求request到达Servlet之前预处理request,在离开Servlet时处理response
D.Filter是一个Servlet

  • 正确答案:D. Filter是一个Servlet
  • 解析:
    • Filter与Servlet是并列概念,均实现特定接口,但职责不同:
    • Filter:预处理请求(doFilter())、后处理响应。
    • Servlet:处理业务逻辑。
    • Filter需在web.xml或注解中配置URL映射。

简述Servlet的生命周期。

  1. 加载和实例化:容器加载Servlet类并创建实例
  2. 初始化:调用init()方法
  3. 处理请求:调用service()方法,根据请求类型调用doGet()/doPost()
  4. 销毁:调用destroy()方法释放资源

EL表达式

获取请求作用域request中的名为“uname”的值的EL表达式是 
${requestScope.name}或者${uname}
解析:

  • ${requestScope.uname}:显式指定从 request 作用域获取 uname 属性
  • ${uname}:EL 表达式会按照 pageScope → requestScope → sessionScope → applicationScope 的顺序自动查找 uname

在一个JSP页面中,有表达式<%=’2’+3 %>,它将输出(  B  )
A.2+3       B.53       C.23      D.不会输出,因为表达式是错误的
解析:

  • '2' 是一个字符(ASCII 码值为 50),3 是数字,+ 运算会先提升 '2' 为 ASCII 码值(50),然后计算 50 + 3 = 53
  • 如果写成 "2" + 3,则输出 "23"(字符串拼接)

使用JSP脚本定义了变量a,在页面中输出a的正确表达式是( B )
A.<%=a;%>     B.<%=a%>        C.<%==a;%>       D.<%a%>
解析:

  • JSP 输出表达式 <%= ... %> 不能加分号 ;,因此 B 正确

在JSP页面中,与EL表达式${user.loginName}等价的是( A )
A.<%=user.getLoginName()%>
B.<% user.getLoginName();%>
C.<%=user.loginName()%>
D.<% user.loginName;%>
解析:

  • EL 表达式 ${user.loginName} 会自动调用 user.getLoginName() 方法(遵循 JavaBean 规范)
  • A 正确:显式调用 getLoginName()

表达式语言中可使用的隐含变量名


作用域

四种作用域对象对比

作用域范围生命周期
pageContext当前JSP页面页面执行期间
request一次请求(可能含多次转发)请求开始到响应完成
session用户会话(浏览器不关闭)会话创建(首次请求)到超时或手动失效
application整个Web应用(所有用户共享)应用启动到停止

例题

要将一个名为“student”的对象student存储在会话作用域中语句是
session.setAttribute("student",student)

Session通常情况下存活时间默认是半小时( √ )

应用作用域中存储的数据可以在会话作用域中取出( × )

如果想要实现购物车功能,应该使用下面哪个知识点( B )
A.Filter B.Session C.Response D.application
解析:
购物车功能需要跨多个请求保存用户选择的商品信息,而 Session(会话) 是最适合的机制:

  1. 会话级存储:Session 在用户整个浏览期间有效,适合保存临时数据(如购物车商品)。
  2. 用户隔离:每个用户的 Session 独立,避免数据混淆。
  3. 安全性:Session 数据存储在服务器端,比 Cookie 更安全。
    其他选项分析:
  • A. Filter(过滤器)
    • 用于拦截请求/响应(如权限控制、日志记录),不涉及数据存储
  • C. Response(响应对象)
    • 用于向客户端返回数据,无法持久化购物车信息
  • D. Application(ServletContext)
    • 全局作用域,所有用户共享数据,不适合存储用户私有的购物车数据

请求转发(Forward)与响应重定向(Redirect)对比

相同点:均用于页面跳转,跳转逻辑由后端代码决定。
不同点:

对比项请求转发(Forward)响应重定向(Redirect)
机制服务器内部跳转,客户端无感知服务器返回新地址,客户端重新发起请求
URL 变化浏览器地址栏不变浏览器地址栏变为新地址
请求次数1 次(服务器内部完成跳转)2 次(客户端先请求原地址,再请求新地址)
数据共享共享同一个request作用域不共享request,通过sessionURL传递
HTTP状态码无特殊状态码(对客户端透明)302(临时重定向)301(永久重定向)

在JSP页面中,使用(     )对象的(     )方法实现请求转发。( A )

A.request.getRequestDispatcher()

B. request.getRequestDispatcher().forward()

C.response.sendRedirect()

D.response.sendRequestDispatcher()

解析:
在 JSP 页面中,请求转发(Forward) 是通过 request.getRequestDispatcher() 获取分发器,再调用 forward() 方法实现的。

正确用法:
request.getRequestDispatcher("目标页面.jsp").forward(request, response);
  • getRequestDispatcher():获取请求转发器(选项 A 正确)。
  • forward():执行实际的转发操作(但题目问的是哪个方法获取转发器,而非执行转发)。

其他选项分析:

  • B. request.getRequestDispatcher().forward()
    • 语法正确,但题目问的是获取转发器的方法,而非完整调用链。
  • C. response.sendRedirect()
    • 用于重定向(Redirect),而非转发(Forward)。
  • D. response.sendRequestDispatcher()
    • 无此方法,属于干扰项。

题目问的是如何获取请求转发器,因此正确答案是 Arequest.getRequestDispatcher())。
若题目问如何执行转发,则需调用 forward() 方法(如选项 B 的完整写法)。

关键区别:

  • 转发(Forward)request.getRequestDispatcher().forward()
  • 重定向(Redirect)response.sendRedirect()

相关文章:

  • 【AI论文】Qwen3 嵌入:通过基础模型推进文本嵌入和重新排序
  • 12.安卓逆向2-frida hook技术-HookJava重载方法
  • 飞书多维表格利用 Amazon Bedrock AI 能力赋能业务
  • vscode 保存 js 时会自动格式化,取消设置也不好使
  • 【游戏项目】大型项目Git分支策略与开发流程设计构想
  • cocosCreator 2.4 使用 flavor 配置安卓多渠道
  • 变压吸附制氮设备的工艺特点
  • 深入理解Python协程:async def、async for、await、yield详解
  • Kubernetes 内部服务转发配置
  • 无人机智能运行系统技术解析
  • windows基线配置
  • 记录下blog的成长过程
  • 2025年渗透测试面试题总结-长亭科技[社招]应急响应工程师(题目+回答)
  • 护照阅读器在景区的应用
  • Linux 复制文件到另一个文件夹方法
  • linux学习记录(六)三个常用命令介绍
  • 大模型笔记_模型微调 vs RAG
  • 【鸿蒙表格组件】鸿蒙ArkTS轻量级表格高效渲染组件
  • 华为云Flexus+DeepSeek征文|华为云CCE容器高可用部署Dify LLM应用后的资源释放指南
  • 6个月Python学习计划 Day 21 - Python 学习前三周回顾总结
  • wordpress 全文/如何点击优化神马关键词排名
  • 网站推广方式方法/网络营销策划案怎么写
  • 用手机怎样免费做网站/seo网站推广首页排名
  • 湛江免费建站公司/百度快速提交入口
  • 怎么合作做网站/百度互联网营销顾问
  • css代码大全/seo排名赚app最新版本