JavaWeb试题解析

试题链接: https://blog.csdn.net/Lvruoyu/article/details/124402176?spm=1001.2014.3001.5501

  1. 在Java Web中,Servlet从实例化到消亡是一个生命周期。下列描述正确的是

A. init()方法是容器调用的Servlet实例的第一个方法

B. 在典型的Servlet生命周期模型中,每次Web请求就会创建一个Servlet实例,请求结束Servlet就消亡了

C. 在容器把请求传送给Servlet之后,和在调用Servlet实例的doGet或者doPost方法之前,容器不会调用Servlet实例的其他方法

D. 在Servlet 实例消亡之前,容器调用Servlet实例的close()方法

servlet的生命周期

每个Servlet的运行都遵循如下生命周期:

1. 创建Servlet实例

web容器负责加载Servlet,当web容器启动时或者是在第一次使用这个Servlet时,容器会负责创建Servlet实例,但是用户必须通过部署描述符(web.xml)指定Servlet的位置,也就是Servlet所在的类名称,成功加载后,web容器会通过反射的方式对Servlet进行实例化。

2. WEB容器调用Servlet的init()方法,对Servlet进行初始化

在Servlet实例化之后,Servlet容器会调用init()方法,来初始化该对象,主要是为了让Servlet对象在处理客户请求前可以完成一些初始化的工作,例如,建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只能被调用一次。init()方法有一个类型为ServletConfig的参数,Servlet容器通过这个参数向Servlet传递配置信息。Servlet使用ServletConfig对象从Web应用程序的配置信息中获取以名-值对形式提供的初始化参数。另外,在Servlet中,还可以通过ServletConfig对象获取描述Servlet运行环境的ServletContext对象,使用该对象,Servlet可以和它的Servlet容器进行通信。无论有多少客户机访问Servlet,都不会重复执行init()。

3. Servlet初始化之后,将一直存在于容器中,service()响应客户端请求

1. 如果客户端发送GET请求,容器调用Servlet的doGet方法处理并响应请求

2. 如果客户端发送POST请求,容器调用Servlet的doPost方法处理并响应请求

3. 或者统一用service()方法处理来响应用户请求

service()是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。要注意的是,在service()方法被容器调用之前,必须确保init()方法正确完成。容器会构造一个表示客户端请求信息的请求对象(类型为ServletRequest)和一个用于对客户端进行响应的响应对象(类型为ServletResponse)作为参数传递给service()方法。在service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。

4. WEB容器决定销毁Servlet时,先调用Servlet的destroy()方法,通常在关闭web应用之前销毁Servlet

destroy()仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当容器检测到一个Servlet对象应该从服务中被移除的时候,容器会调用该对象的destroy()方法,以便让Servlet对象可以释放它所使用的资源,保存数据到持久存储设备中,例如,将内存中的数据保存到数据库中,关闭数据库的连接等。当需要释放内存或者容器关闭时,容器就会调用Servlet对象的destroy()方法。在Servlet容器调用destroy()方法前,如果还有其他的线程正在service()方法中执行,容器会等待这些线程执行完毕或等待服务器设定的超时值到达。一旦Servlet对象的destroy()方法被调用,容器不会再把其他的请求发送给该对象。如果需要该Servlet再次为客户端服务,容器将会重新产生一个Servlet对象来处理客户端的请求。在destroy()方法调用之后,容器会释放这个Servlet对象,在随后的时间内,该对象会被Java的垃圾收集器所回收。
  1. 对于ServletRequest接口的获取请求参数的方法的描述那一项是正确的?

A. getParameter方法只用于接收POST请求参数,接收GET请求参数需要使用getQueryString方法

B. 如果一个参数key有多个值,那么getParameter(key)方法会返回空

C. 如果一个参数key有多个值,那么getParameterValues(key)方法会返回一个包含所有值的字符串数组

D. getParameter方法返回Object对象,使用前要强制类型转换:如String str=(String) request.getParameter(key)

获取请求参数通用方式的常用方法:
	getParameter 根据参数名称获取参数值
	getParameterValues 根据参数名称获取参数值的数组
	getParameterNames 获取所有请求参数的名称
	getParameterMap 获取所有参数的Map集合
  1. 下面哪一组属于JSP动作标识()
  2. 以下哪个不属于JSP指令标签
JSP三大指令: 
	1. page指令:JSP三大指令之一,page指令用来设置整个JSP页面的相关属性和功能;包括制定JSP脚本语言的种类、导入的包或者类、制定页面编码的字符集   <%@ page 属性1= “值1” 属性2=“值2” …%>
	2. include指令:JSP三大指令之一,用来将一个页面引入到本页面。分为静态包含和动态包含两种情况。   <%@ page 属性1= “值1” 属性2=“值2” …%>
	3. taglib指令:JSP三大指令之一,使用taglib指令引入JSTL的标准标签库或者自定义的标签库,可以简化JSP的语法,从而简化JSP页面的设计。   <%@taglib uri=“标签描述文件” prefix=“前缀名” %> 
JSP动作标记: 
	1. include动作标记   <jsp:include page = “URL”/>或<jsp:include page = “URL” >
	2. forward动作标记   <jsp:param name = “” value = “”>
	3. useBean动作标记   <jsp:useBean id=“bean的名字” class=“创建beans的字节码文件” scope=“bean有效范围” />
  1. 要设置JSP页面支持的语言,要设置page指令的哪个属性

A. contentType属性

B. Import属性

C. extends属性

D. language属性

JSP Page指令的属性:
	language 属性-->设置当前页面中编写 JSP 脚本所使用的语言,默认值为 java    <%@ page language="java" %>
	contenType 属性-->设置发送到客户端文档响应报头的 MIME(Multipurpose Internet MailExtention)类型和字符编码,多个值之间用“;”分开  <%@ page contenType="MIME 类型; charset=字符编码" %>
	import 属性-->用来导入程序中要用到的包或类,可以有多个值,无论是 Java 核心包中自带的类还是用户自行编写的类,都要在 import 中引入  <%@ page import="包名.类名" %>
	info 属性-->设置 JSP 页面的相关信息,如当前页面的作者、编写时间等。此值可设置为任意字符串,由 Servlet.getServletInfo() 方法来获取所设置的值  <%@ page info="可以是任意的字符串"%>
	extends 属性-->指定将 JSP 页面转换为 Servlet 后继承的类。在 JSP 中,通常不会设置该属性,JSP 容器会提供继承的父类。
	session 属性-->表示当前页面是否支持 session,如果为 false,则在 JSP 页面中不能使用 session 对象以及 scope=session 的 JavaBean 或 EJB。该属性的默认值为 true。
	errorPage 属性-->用于指定JSP文件的相对路径,在页面出错时,将转到这个 JSP 文件来进行处理。
	isErrorPage 属性-->指示一个页面是否为错误处理页面。设置为 true 时,在这个 JSP 页面中的内置对象 exception 将被定义,其值将被设定为调用此页面的 JSP 页面的错误对象,以处理该页面所产生的错误。   <%@ page isErrorPage="true" %>
	pageEncoding 属性-->设置 JSP 页面字符的编码,常见的编码类型有 ISO-8859-1、gb2312、utf-8 和 GBK 等。默认值为 ISO-8859-1。   <%@ page pageEncoding="字符编码" %>
  1. 下面哪项内容使用request对象无法实现

A. 定义属性

B. 获取客户端IP

C. 获取表单提交的信息

D. 将页面重定向至index.jsp页

知识点一、

String getParameter(String name)	返回name指定参数的参数值
String[] getParameterValues(String name)	返回包含参数name的所有值的数组
void setAttribute(String,Object)	存储此请求中的属性
Object getAttribute(String name)	返回指定属性的属性值
String getContentType()	得到请求体的MIME类型
String getProtocol()	返回请求用的协议类型及版本号
String getServerName()	返回接受请求的服务器主机名
int getServerPort()	返回服务器接受此请求所用的端口号
String getCharacterEncoding()	返回字符编码方式
void setCharacterEncoding()	设置请求的字符编码方式
int getContentLength()	返回请求体的长度(以字节数)
String getRemoteAddr()	返回发送此请求的客户端IP地址
String getRealPath(String path)	返回一虚拟路径的真实路径
String request.getContextPath()	返回上下文路径

知识点二、
请求重定向,转发

请求转发:
	请求转发是服务器行为,即用户向服务器发送了一次http请求,该请求可能会经过多个信息资源处理以后返回给用户,各个信息资源使用请求转发机制互相转发请求,从用户的感官上来看,是感觉不到请求转发的。
请求转发的关键点:
	从第一次发送请求到最后一次发送请求的过程中,web容器只创建一次request和response对象,新的页面继续处理同一个请求。
	其本质是服务器将request对象在页面之间进行了相互的传递。
	可以共用request对象信息。
	服务器内部进行的转发
	只有一次请求
	地址栏不会发生变化
	必须是在同一台服务器下完成
	
	> //获取请求转发器
	> RequestDispatcher dispatcher = req.getRequestDispatcher("/myservlet04.do");
	> //请求转发
	> dispatcher.forward(req, resp);


请求重定向:
	请求是客户端行为(客户端跳转)。服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。
几个关键问题
	有两次请求
	地址栏会发生改变
	HttpServletRequest不能可以在这两次请求中共享数据
	可以共享context,session域的数据
	可以在不同服务器下完成
	
	> resp.setStatus(302);
	> resp.setHeader("Location", "/myservlet04.do");
	
	> resp.sendRedirect("myservlet04.do")

  1. 下面哪项不属于Jsp内置对象

A. include

B. out

C. session

D. page

Jsp一共定义了9个对象:request、response、session、application、out、pagecontext、config、page、exception
  1. 以下哪个对象提供了访问和放置页面中共享数据的方式

A. pageContext

B. response

C. request

D. session

jsp四大作用域
page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)
  1. 下列关于Servlet接口的说法中,正确的是

A. Servlet接口中只有一个默认的实现类HttpServlet

B. Servlet接口中定义了4个抽象方法

C. Servlet接口的抽象方法中,init()、service()和destroy()方法可以表现Servlet的生命周期

D. GenericServlet类不是Servlet接口的实现类

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铲屎官白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值