栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

高薪程序员&面试题精讲系列73之你熟悉servlet、session吗?get与post有哪些区别?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

高薪程序员&面试题精讲系列73之你熟悉servlet、session吗?get与post有哪些区别?

一. 面试题及剖析

1. 今日面试题

你熟悉servlet与session吗?

servlet和JSP有什么关系?

jsp有哪几个作用域?有几个内置对象?

说说session与servlet的生命周期

cookie与session的区别有哪些?

HTTP协议你熟悉吗?

说说HTTP请求的工作原理和执行流程吧

你遇到过哪些响应吗?都是什么含义?

你了解哪些请求方式?

get请求与post请求有什么区别?

如何防止post提交?

重定向和请求转发的区别有哪些?

从同一个浏览器页面发送两次请求去后台,后台如何知道这是同一个session?

2. 题目剖析

今天的面试题目,主要是考察我们的Web基础知识,基本没有什么难度,只要我们平时的基础知识稍微扎实点,很容易就能回答出来。这一块的内容,主要还是以记忆为主,需要理解的东西不是很多。而且这一块的内容,在现在的Java开发里,除了HTTP协议、Session、cookie会用到,Servlet、JSP基本都不用了。所以这一块在面试时考察的频率也并不高,大家稍微复习一下就可以。

有的小伙伴会问,既然企业里不用Servlet、JSP了,为什么还要学习它们?这不操蛋吗?其实不是这样的!我们现在开发时虽然很少直接使用Servlet了,但很多Web框架,比如经典的SpringMVC,其底层还是基于Servlet的。所以你想,如果你连Servlet是啥,怎么用都不知道,你怎么理解SpringMVC的底层原理和工作机制呢?

注意,本文主要是讲解与Web相关的面试题,并不会过多的讲解这些Web技术的具体用法。这些基础的东西,在我们上课时都已经很深入的给大家讲过了。如果你在这一块的基础很薄弱,可以给壹哥私信,或者在评论区给壹哥留言,可以免费获取Web课程的视频等资料。

受限于篇幅,在本篇文章中,壹哥先不讲解cookie和session的相关内容,我会在下一篇文章中再进行讲解。

二. Servlet

1. 简介

Servlet其实是Server Applet的简称,正式名称是“小服务程序或服务连接器”。它是一种用Java编写的服务器端应用程序,可以生成动态的Web内容,充当了用户与服务器之间的桥梁,能够处理和转发用户的请求,并将处理后的结果返回给客户端。

2. 生命周期

所谓的Servlet生命周期,其实就是从Servlet创建到销毁的整个过程,主要分为以下几个阶段:
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁—>垃圾回收。

  • 类加载:通过类加载器加载Servlet类到Web容器中,并解析Web请求,
  • 创建Servlet实例:每当用户请求一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程;init():该方法在第一次创建 Servlet 时被调用,执行一次性的初始化工作,只会调用一次,在后续每次用户请求时都不再调用。一般是服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,才会初始化一个Servlet对象;service():处理来自客户端的请求,执行主要的实际任务,把处理后的格式化响应结果返回给客户端,可以在该方法中检查 HTTP 的具体请求类型;
  • destroy() :该方法在Servlet 生命周期结束时被调用,且只会被调用一次。我们可以在该方法中执行关闭数据库连接、停止后台线程、把 cookie 列表或点击计数器等数据写入到磁盘等清理功能;
  • 垃圾回收:最后,Servlet由 JVM 的垃圾回收器进行垃圾回收。
  • 所以Servlet的生命周期分为:加载阶段、实例化阶段、初始化阶段、执行服务阶段、销毁阶段。我们可以参考下图来理解Servlet的生命周期:

    3. 3种转发方式

    Servlet中有3种常用的转发方式来对请求进行传递,如下:

    include:包含,将req和resp对象转发给url表示的对象,同时发送PrintWriter在此处写入的信息,属于转发,所以地址栏中的地址不变;

    forward:请求转发,将req和resp对象转发给url表示的对象,由于是转发,所以地址栏中的地址不变;

    sendRidirect:重定向,由客户端重新发起一次请求,请求地址重新指向其参数url,并再次发送req,由于是重新定位发送,地址栏中的地址会改变,这是由客户端发起的第2次请求。

    三. JSP

    除了Servlet,还有另一个常用的Web技术,就是JSP,接下来壹哥再带各位复习一下JSP的知识。

    1. 简介

    JSP全称是Java Server Pages,这是一种动态的网页开发技术,其本质就是Servlet。主要是使用JSP标签在HTML网页中插入Java代码,用于实现Java Web程序的用户界面部分。JSP和Servlet的最大不同在于,JSP是Java和HTML的混合体,侧重于视图;Servlet主要是在Java文件中进行实现,是从表示层的HTML分离出来的,主要用于控制逻辑。

    2. 4个作用域

    关于JSP,面试官经常会问我们JSP的4个作用域,如下:

  • page:只在当前用户请求的页面中有效,当前页面关闭或转到其他页面时,page对象将在响应结果返回到客户端后释放,一般操作时是使用pageContext内置对象来完成。
  • request:表示在当前请求中有效,request可以通过setAttribute()方法实现页面间的信息传递,也可以通过forward()方法进行页面间的跳转。只要是服务器请求转发类型的跳转,request属性就可以一直传递下去。session: 在当前会话中有效,也就是在同一台电脑上,从用户打开浏览器开始,到用户关闭浏览器结束,这中间的整个过程就是一个会话。在一个会话内,可能会进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。application:在整个应用程序中都有效,也就是当应用启动,到应用结束的这段时间,application作用域中存储的数据都是有效的,一般是通过ServletContext实现信息的存储传递。
  • 3. 9个内置对象

    关于JSP,面试官常问的另一个面试题是JSP的9个内置对象,如下:

  • PageContext:JSP的页面容器;
  • request:获取用户的请求信息;response:服务器向客户端的回应信息;session: 用来保存每一个用户的信息;
  • application: 表示所有用户的共享信息;
  • config: 服务器配置信息,可以取得初始化参数;
  • out:页面输出对象;
  • page:该页面中表示出来的一个Servlet实例对象;exception:配置错误页面时使用。
  • 四. HTTP协议

    另外,面试官有时候还会考察我们关于请求协议与请求方式相关的内容,所以 接下来我们再复习一下HTTp协议。

    1. 概念

    HTTP(HyperText Transfer Protocol),超文本传输协议,底层基于TCP/IP协议,是一种应用于互联网的应用层协议,也是现代万维网的通信基础。目前该协议常用的版本有HTTP1.1与HTTP2.0两个版本。

    具体的说,HTTP协议就是一个 客户端终端(用户) 和 服务器端(网站) 之间 请求和应答的标准(TCP)。通过使用浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器的指定端口(默认80),我们把这个客户端称之为用户代理程序(user agent),因为是这个客户端替客户向服务器发送请求,等于是一个代理人。应答的服务器上存储着一些资源,比如HTML文件和图像、音视频等,我们把这个服务器称之为源服务器(origin server)。而在用户代理和源服务器之间又可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

    2. 特点

    HTTP作为基于TCP/IP协议之上的应用层协议,自身具有鲜明的特点:

    基于 请求-响应 的模式:简单地说,就是客户端发起请求,服务端返回响应;

    无状态保存:HTTP是一种无状态(stateless)协议,不会保存通信状态。也就是说HTTP协议自身不会对请求和响应之间的通信状态进行保存,不会对之前发送的请求或响应内容做持久化,不保留之前一切的请求或响应报文信息。也正因如此,才需要有cookie和Session这种技术来辅助保存通信状态;

    无连接:就是不和每个用户建立长久的连接,每次的连接都只处理一个请求,请求一次就响应一次,并在收到客户端的应答后就断开连接。以此节省传输时间,提高并发性能。在HTTP1.1协议中,并不是请求响应后立刻就断开,而是会等几秒钟,看后续用户是否还有其他操作,若有,就继续通过之前的连接通道来收发消息;若没有,则断开连接,以此来减少短时间内建立连接的次数。

    3. 工作原理(重点)

    HTTP协议定义了一个Web客户端是如何从Web服务器请求Web页面,以及服务器是如何把这个Web页面返回给客户端的标准过程。该协议采用了请求/响应模型。在请求时,客户端首先会向服务器发送一个请求报文,该请求报文中会包含请求的方法、URL、协议版本、请求头部、空行和请求数据等信息。然后服务器会返回一个状态行(响应报文)作为响应结果,具体的响应内容包括协议的版本、成功或者错误代码、服务器信息、响应头部、空行和响应数据。

    4. 请求报文

    在上面的章节中,壹哥给大家提到了请求报文的概念,那么请求报文具体是什么样的呢?我们来看下图:

    由此可知,客户端发送到服务器的请求报文,会包括如下内容:

  • 请求行(request line):这部分用来说明请求类型,要访问的URL资源以及所使用的HTTP版本;
  • 请求头部(header):该部分会紧接着请求行(即第一行),用来说明服务器要使用的附加信息;空行:位于请求头部后面,但这个空行是必须的;请求数据:请求主体,可以在这里添加任意的其他数据。
  • 5. 响应报文

    客户端发送完请求之后,服务器就会给客户端返回响应信息,也就是响应报文,其内容如下所示:

    所以HTTP响应报文也由四个部分组成,分别是:

  • 状态行:该部分由HTTP协议版本号, 状态码, 状态消息 组成;
  • 消息报头:用来说明客户端要使用的一些附加信息;空行:消息报头后面的空行是必须的;响应正文:这是服务器返回给客户端的文本信息。
  • 6. 请求/响应流程(重点)

    了解了HTTP协议及其报文的基本内容之后,壹哥就根据上述HTTP请求原理,分解出HTTP的请求/响应流程,如下:

    1. 客户端连接到Web服务器:一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接;

    2. 发送HTTP请求:通过TCP套接字,客户端向Web服务器发送一个文本类型的请求报文,该报文由请求行、请求头部、空行和请求数据4部分组成。

    3. 服务器接受请求并返回HTTP响应:Web服务器解析该请求,定位到请求资源。服务器将资源复本写到TCP套接字,由客户端读取,响应报文由状态行、响应头部、空行和响应数据4部分组成。

    4. 释放连接TCP连接:若连接模式为close,则服务器会主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若 连接模式为keepalive,则该连接会保持一段时间,在该时间内会继续接收请求;

    5. 客户端浏览器解析HTML内容:客户端浏览器首先解析状态行,查看表明请求是否成功的状态码。然后解析每一个响应头,响应头包括若干字节的HTML文档和文档字符集。客户端浏览器读取响应回来的HTML数据,根据HTML语法对其进行格式化,并在浏览器的窗口中显示。

    所以,当我们在浏览器地址栏输入一个URL,按下回车键之后,会经历以下流程:

    1. 浏览器向 DNS服务器 请求解析该 URL中域名 所对应的 IP地址;
    2. 解析出 IP地址后,根据该 IP地址和默认的80端口,和服务器建立TCP连接;浏览器发出读取具体资源文件(URL中的path部分)的HTTP 请求,该请求报文作为 TCP 三次握手中第三个报文数据发送给服务器;服务器对浏览器的请求作出响应,并把对应的 html文本发送给浏览器;
    3. 释放 TCP连接;
    4. 浏览器将该 html文本解析并显示出来。

    7. HTTP响应码

    当客户端向服务器发送完请求,服务器就会返回响应信息,而所有的HTTP响应,其第一行都是状态行。状态行中依次是HTTP版本号,3位数字组成的状态码,以及描述状态的短语,彼此之间由空格分隔。其中状态代码的第一个数字代表当前响应的类型,如下:

  • 1xx消息——请求已被服务器接收,继续处理;
  • 2xx成功——请求已成功被服务器接收、理解、并接受;3xx重定向——需要后续操作才能完成这一请求;4xx请求错误——请求含有词法错误或者无法被执行;
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误。
  • 我们也可以参考下表来理解这些不同响应码类型的含义:

    我们在开发时,其实会遇到很具体的HTTP响应码,比如常见的200、404、500等,这些常见状态码的含义可以如下图所示:

    六. 结语 

    对于今天的内容,我觉得,只要是我教出来的学生,就今天的题目,在我平时讲课时,壹哥就已经给大家讲清楚并要求大家随堂记忆了,根本都不用专门复习。但如果你在这一块的基础比较薄弱,还是需要背一背的,另外如果你需要相关的学习资料,可以给壹哥留言或私信。

    壹哥会在下一篇文章中,继续讲解Web基础相关的面试题,敬请关注哦!

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/759030.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号