这里写目录标题
一、Http协议部分
1.说一下什么是http协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
2.Http协议的主要特点?
1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
5、支持B/S及C/S模式。
3.什么是Http协议无状态协议?怎么解决Http协议无状态协议?
- 无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
- 无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。
4.说一下Http协议中302状态(听说阿里经常问)
http协议中,返回状态码302表示重定向。这种情况下,服务器返回的头部信息中会包含一个 Location 字段,内容是重定向到的url。
5.get请求与post请求的区别?
- get重点在从服务器上获取资源,post重点在向服务器发送数据。
- get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?“连接,多个请求数据间用”&"连接。post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的。
- Get传输的数据量小,因为受URL长度限制,但效率较高。Post可以传输大量数据,所以上传文件时只能用Post方式。
- get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等。post较get安全性较高
- get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。
post支持标准字符集,可以正确传递中文字符。
6.简述http的工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是 HTTP 请求/响应的步骤:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;
二、servlet部分
1.什么是servlet?
servlet是运行在web服务器中的小型java程序,通常通过HTTP协议接受和相应来自web客户端的请求。
2.servlet的生命周期
(1)init:第一次请求资源的时候,执行且只执行一次init方法。
(2)service:第二次往后,执行service方法,执行多次。在这个方法内部,根据请求方式的不同,进而继续调用不同的doGet和doPost方法。
(3)destory:当Servlet服务器正常关闭时,执行destroy方法,只执行一次。
拓展:浏览器的请求过程:
上面这张图基本上把整个流程算是交代清楚了。现在我们梳理一遍。
(0)Tomcat容器中通过web.xml加载所有的Servlet。
(1)用户在浏览器输入不同的地址,向Tomcat容器请求资源。
(2)Tomcat容器根据地址首先在容器内找到应用ServletTest。
(3)Tomcat容器再根据地址去web.xml找到相应的servlet地址(/demo1)。
(4)Tomcat容器根据找到的servlet地址(/demo1)去web.xml找到相应的Servlet类,并实例化。
(5)Tomcat容器实例化相应的Servlet,首先调用init方法。
(6)Tomcat容器实例化相应的Servlet,首先调用service方法处理用户请求,比如post或者是get。
(7)Servlet处理完成之后,先将数据给Tomcat容器,Tomcat容器再把处理结果给浏览器客户端。
(8)Tomcat容器调用servlet实例的destory方法销毁这个实例。
3.转发和重定向的区别?
1、请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;
2、地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化;
3、是否共享数据:重定向两次请求不共享数据,转发一次请求共享数据(在request级别使用信息共享,使用重定向必然出错);
4、跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;
5、发生行为不同:重定向是客户端行为,转发是服务器端行为;
4.说一说servlet的四大作用域
ServletContext:
生命周期:从服务器启动到关闭。
作用:存取数据,读取资源文件
Session:
生命周期:一次浏览器的打开到关闭一般视为一次会话,在调用request.getSession方法和访问jsp时被创建,当关闭浏览器时session结束。
当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。 如果调用session提供的invalidate() ,可以立即销毁session。
作用:保存登录的用户信息、购物车信息等
Request:
生命周期: 在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
作用:获取表单数据,转发过程传递数据
PageContext:
生命周期:当对JSP的请求时开始,当响应结束时销毁。
作用:获取其它八大隐式对象,可以认为是一个入口对象。获取其所有域中的数据
三、JSP部分
后续部分,等待更新~~~~~~