在Web应用程序中,(    )负责将HTTP请求转换为HttpServletRequest对象

A Servlet对象
B HTTP服务器
C Web容器
D JSP网页

首先我们来看看web程序的整个过程

web的基本工作流程

首先,我们先来思考一下我们平常在上网浏览网页时候的场景,大致就是打开一个web浏览器,输入某一个网站的地址,然后转到该网址,在浏览器中得到该网址的页面。从这个场景中我们可以抽象出来几个基本对象,我们(用户)、web浏览器(客户端)和发送过来页面的地方(服务端),这些对象其实就是整个web工作流程中的重要组成部分。

为了加强理解,其实可以将这个工作流程看做去吃饭时点餐的流程,web浏览器就是服务员,而服务端就是厨房。你给服务员说你要点什么菜,然后服务员将你点的菜端上来,具体厨房里是怎么忙活的也并不知道,其实web服务器就相当于厨师,有着各种各样的技能,根据你的成菜要求,为你进行服务,数据库在这里可以认为是个菜窖,需要什么菜去拿什么菜。

web中的一些基本概念

HTTP

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议)是用于从web服务器传输超文本到本地浏览器的传输协议,是因特网中的“多媒体信使”。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。同时,HTTP使用的是可靠的数据传输协议,即使是来自于地球另一端的数据,它也可以确保数据在传输的过程中不会丢失和损坏,保证了用户在访问信息时的完整性。HTTP是互联网上应用最为广泛的一种协议,后面还会介绍其他的互联网常用协议(https,ftp,file,mailto等)。
按照上述点餐流程理解的话就是厨师具备煎、炒、烹、炸、溜、爆、煸、蒸、烧、煮等多种烹调技法,你需要告诉厨师这道菜怎么做。

web客户端和服务端

web服务器是web资源的宿主,每天都有数以亿计的图片、HTML页面、视频、音频等资源在互联网上传输,而这些资源信息都是存储在web服务器(由于web服务器使用的是HTTP协议,所以也常常被称作HTTP服务器)上的。如果客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据以及其他一些数据信息,包括对象,对象类型,对象长度等。

最常见的web客户端就是web浏览器,web浏览器向服务器请求HTTP对象,并将这些对象显示在你的屏幕上。其他的客户端还有“网络蜘蛛”(spiders)、“web机器人”(Web robots)等。这些客户端还被称作Agent代理,可以代表用户发起HTTP请求,后面提到的“网络蜘蛛”、“web机器人”都是自动代理,可以在无人监视的情况下,自动发起HTTP请求并获取相应内容,也就是我们常说的“网络爬虫”。

URI

Web上可用的每种资源 HTML文档、图像、视频片段、程序等,均由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进行定位。这个就像是快递地址一样,快递小哥根据你的地址才能找到你你给你快递,然后你返回给快递小哥一个签收单,而这个地址在世界范围内唯一标识并定位资源信息。
给定了URI,HTTP就可以解析出来对象,URI有两种形式——URL和URN。

URL

统一资源定义符(Uniform Resource Locator)是资源标识符最常用的形式,它提供了一种定位因特网上任意资源的手段。URL精确地说明了某资源的位置以及如何去访问它。

URL的语法会随着方案的不同而有所变化,但都遵循一个通用的语法规则。
大多数URL方案的语法都遵循由这9个部分构成的通用格式上,但是几乎没有URL全部包含了这些组件。

浏览器的工作流程

在了解完web的工作流程后及相关基本概念后,再来了解一下浏览器的工作流程。浏览器是我们最常用的客户端工具,那它的工作流程是怎样的呢?在这之前我们先来了解一下IP地址的概念。

IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

这个概念是不是和前面介绍的URL很像?那其实URL没有使用数字形式的IP地址,它使用的是文本形式的域名,或者称为主机名。主机名就是IP地址比较人性化的别称。想象一下,每次访问网站的时候,需要输入的是一串IP地址,那得有多繁琐。所以可以通过一种名为域名服务(DNS)的机制帮我们将主机名转化为IP地址,这样繁琐的问题就简单化了。浏览器的工作流程也就基本清楚了。

连接

大概介绍了web的工作流程和HTTP报文之后,我们来看一下报文是如何传输的。在HTTP客户端向服务器发送报文之前,需要用到我们前面所提到的IP地址和端口号在客户端与服务器之间建立一条TCP/IP连接。这里涉及到一个传输控制协议(Transmission Control Protocol,TCP)的概念。首先我们看一下HTTP网络协议栈

TCP具有以下几个特征

  • 无差错的数据传输
  • 按序传输(按照发送顺序送达)
  • 未分段的数据流(可以在任何时候以任意尺寸发出数据)

所以只要建立了TCP连接,客户端与服务器之间的报文交换就不会丢失、不会被破坏、不会出现错序。在TCP中,你只需要知道服务器的IP地址以及运行在服务器上特定程序相关的端口号,就可以了,而具体到客户端与服务器之间是需要通过Socket“三次握手”进行连接,这里不做赘述。

在解析域名,建立TCP/IP连接,发送http报文,得到响应结果后,服务器会断开TCP连接,浏览器显示内容。但是如果服务器或客户端在报文中增加connection:keep-alive的名/值对,就表示客户端与服务器之间会继续保持连接,在下次使用时可以继续使用该连接。

一、为什么要转换

因为ServletRequest中只提供了获取基本信息的方法,没有获取用户请求类型的方法。

所以就必须要将ServletRequest转成HttpServletRequest。因为HttpServletRequest与Http协议相关的,

所以它包含了获取用户请求类型的方法叫:getMethod.

二、为什么能转换成功

因为,在tomcat内部创建的这个request它就是httpservletrequest接口的子类。

三、转换内部代码实现的原理

1、用户发出doGet或doPost请求到tomcat容器。

2、tomcat接受到请求后会准备好request对象,response对象,

3、tomcat初始化程序员创建的HTttpServlet的子类,这里创建的子类名称为:hiServlet,同时调用doGet方法,传递request和response对象地址。

4、tomcat这两个对象传递到hiServlet类,在下图的myeclipse控制台可以看到是RequestFacade类会去调用父类HTTPServlet类的service(ServletRequest req, ServletResponse res)方法。

在这个方法中将请求转换成HttpServletRequest请求。
所以这题选c,我是歌谣,欢迎发布你的理解

文章仅个人理解,来在各大网站。如有不合理之处,欢迎吐槽。

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380691

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380882

阅读目录(置顶)(长期科技领域知识)https://blog.csdn.net/weixin_43392489/article/details/102600114

歌谣带你看java面试题 https://blog.csdn.net/weixin_43392489/article/details/102675944

java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象相关推荐

  1. java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述

    java面试题29 牛客 以下关于集合类ArrayList.LinkedList.HashMap描述错误的是() A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或 ...

  2. java面试题28 牛客 下面有关java classloader说法错误的是?

    java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension Cl ...

  3. java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?

    java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有? A ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. B 对于随 ...

  4. Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持

    Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          ) A Java反射主要涉及的类如C ...

  5. Java面试题18 牛客 假定Base b = new Derived();

    Java面试题18 牛客 假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  6. Java面试题17 牛客 下面哪个选项正确创建socket连接?

    Java面试题17 牛客 下面哪个选项正确创建socket连接? Socket s = new Socket(8080); Socket s = new Socket("192.168.1. ...

  7. Java面试题16 牛客 以下java程序代码,执行后的结果是()

    Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test {     public static void ma ...

  8. Java面试题15牛客 以下关于Integer与int的区别错误的是

    Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...

  9. Java面试题19 牛客下面有关java的引用类型,说法正确的有?

    Java面试题19下面有关java的引用类型,说法正确的有? A:对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中 B:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可 ...

最新文章

  1. 【C++】【十一】二叉树递归遍历与非递归遍历的实现及思路
  2. 微软亚洲研究院多媒体计算组招聘计算机视觉算法实习生
  3. 《ES6基础教程》之 Call 方法和 Apply 方法
  4. 前端学习(392):京东制作页面1京东项目项目介绍
  5. python快递费用计算_[Python]简单用Python写个查询快递的程序最后附源代码
  6. 图标插件java_java – Eclipse插件:标记的自定义图标
  7. c++中计算2得n次方_PLC-上海会通松下PLC中的数据类型有哪些?
  8. python工资这么高为什么不学-人人学Python,为什么就业拿高薪的那么少?
  9. ECSHOP首页调用指定分类推荐商品/热卖商品/新品商品
  10. linux 显卡驱动
  11. hg8120c 维修使能工具_ONT 用户手册(中国移动) V300R016C10.doc
  12. 物联网共享单车有什么物联技术?
  13. linux常见维护命令报错,Linux系统维护命令小结.ppt
  14. Axure计算器原型
  15. HTML——简单的网站首页
  16. 初学者也能看懂的Ray March体积云
  17. 为什么局域网 IP 通常以 192.168 开头而不是 1.2 或者 193.169 ?
  18. Nature子刊:中国学生读完大学后,批判性思维和学术技能出现全面下降
  19. 安卓开发用什么语言好!这是一份用心整理的Android面试总结,已拿offer入职
  20. umi build打包之后部署报错

热门文章

  1. token要加编码decode吗_彻底弄明白Base64 编码
  2. C语言 floor四舍五入,Math函數的四舍五入,Floor,Ceiling,Round的一些注意事項!...
  3. python写入文字到txt只写入最后一行_python文件写入:向txt写入内容的设置
  4. c语言智能小车项目的感想,智能小车毕业论文(完整版)要点分析.doc
  5. 翼城中学2021高考成绩查询入口,2021年临汾中考分数线查询(4)
  6. PHP获取QQ等级,php仿QQ等级太阳显示函数
  7. foursquare nyc数据集_炫酷的python地理数据可视化
  8. 【51单片机快速入门指南】4.4.2:Mahony AHRS 九轴姿态融合获取四元数、欧拉角
  9. 微信小程序中base64转换成图片;uni-app小程序base64转图片;微信小程序base64文件转图片;微信小程序base64图片转图片
  10. 解决vuex中store保存数据,刷新页面会清空得问题