Javaweb后端学习笔记
C/S结构与B/S结构:
1、C/S(Client/Server)结构:适用于个人娱乐市场【QQ等】
(1)、优点:安全性高、且有效降低服务器压力;
(2)、不足:增加服务成本、更新较繁琐;
2、B/S(Browser/Server)结构:适用于个人或企业
(1)、优点:不会增加用户获取服务的成本、且无需更新浏览器;
(2)、不足:无法有效对资源文件进行保护、服务器压力大(多线程、高并发问题);
ISO/OSI参考模型、TCP/IP参考模型、5层参考模型:
计算机网络是一个将分散且具备独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统;
各种协议(了解):
1、ICMP协议:因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
2、TFTP协议:是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
3、HTTP协议:超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
4、DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
5、NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。
6、DHCP协议:一个局域网的网络协议,使用UDP协议工作,用于给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
TCP协议和UDP协议的区别(传输层):
1、TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的。
2、TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。
3、TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。
4、TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
5、TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
6、TCP面向的是字节流的服务,UDP面向的是报文的服务。
TCP/IP的三次握手:
TCP握手协议:TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
1、第一次握手:建立连接时,客户端发送SYN包(SYN=1,seq=x(随机))到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)
2、第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq =k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
3、第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
TCP/IP四次挥手:
1、客户端打算关闭连接,此时会发送一个TCP首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
2、服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。
3、客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
4、等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。5、客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
6、服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
7、客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。
每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。
注:主动关闭连接的,才有TIME_WAIT状态。
TCP/IP四次挥手释放连接时,TIME_WAIT等待2MSL的意义:
1、MSL :报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
2、TIME_WAIT等待2倍的MSL,比较合理的解释是:网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待2倍的时间。
为什么TCP/IP是三次握手?不是两次、四次?
1、TCP 连接:用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。
(1)、三次握手才可以阻止历史重复连接的初始化(主要原因)
(2)、三次握手才可以同步双方的初始序列号
(3)、三次握手才可以避免资源浪费
2、不使用「两次握手」和「四次握手」的原因:
(1)、两次握手:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
(2)、四次握手:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数;
TCP粘包的产生:
1、发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包;
2、接收端粘包:接收端不及时接收缓冲区的包,造成多个包接收。
电脑上访问一个网页的整个流程(了解)
1、浏览器分析连接指向的页面URL(http://www.baidu.com)
2、浏览器向DNS请求www.baidu.com.的IP地址
3、域名系统DNS解析出百度官网的服务器IP地址
4、浏览器与该服务器建立TCP连接(默认端口80)
5、浏览器发出HTTP请求获取指定页面。
6、服务器通过HTTP响应把文件对应页面发送给浏览器。
7、TCP连接释放。
8、浏览器将文件进行解析,并将web网页显示给用户
web服务器下共享资源文件的分类:
1、静态资源文件(在浏览器下编译执行):.html、.css、.js、.txt、.jpg
2、动态资源文件(在服务器下编译执行):.jsp、.class
浏览器发送请求的三要素:
1、发送请求地址:超链接<a>与表单域<form>标签
2、发送请求方式:常用GET与POST方式
3、发送请求携带参数
Http请求协议包与Http响应协议包的内部结构(自上而下)
1、Http请求协议包:
(1)、请求行(保存请求地址与方式)
(2)、请求头(GET请求参数信息)
(3)、空白行
(4)、请求体(POST请求参数信息)
2、Http响应协议包:
(1)、状态行(Http状态码)
(2)、响应头(编译器)
(3)、空白行
(4)、响应体(静态与动态资源文件)
Http状态码(常见)
1xx:信息性状态码
(100):收到了请求的起始部分,客户端应该继续请求
2xx:成功状态码
(200):服务器成功处理了请求
3xx:重定向状态码
(301):表示永久性重定向,被请求的资源的URL已永久移动到新位置。服务器返回此响应时,会自动将请求者转到新位置。
(302):表示临时性重定向,请求的资源临时从不同的URL响应请求,但请求者应继续使用原有位置来进行以后的请求
4xx:客户端错误状态码
(400):客户端错误,表示提交请求参数过程中发送了一个错误的请求
(404):服务器未定位到访问的资源文件
(405):已定位到资源文件,但浏览器采用的请求方式不能处理
5xx:服务器错误状态码
(500):Java异常导致处理失败
HTTP和HTTPS的区别
1、https协议需要到ca申请证书,一般免费证书很少,需要交费
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
3、http和https使用的是完全不同的连接方式用的端口也不一样:前者是80,后者是443
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议要比http协议安全
GET与POST请求方式的特点
1 、GET请求方式
(1)、发送请求时,请求携带参数的数量不能超过4K
(2)、发送请求时,浏览器地址栏上要展示请求参数信息
(3)、发送请求时,请求参数信息保存在请求头中
(4)、返回的资源文件内容保存在浏览器的缓存中
2 、POST请求方式
(1)、发送请求时,可携带任意数量的请求参数
(2)、发送请求时,浏览器地址栏上要隐藏请求参数信息
(3)、发送请求时,请求参数信息保存在请求体中
(4)、返回的资源文件内容要保护,即阅后即焚
Servlet规范
1、理解
Servlet是一种指定与管理动态资源文件的规范,可以接收客户端发送过来的请求,并响应数据给客户端。
2、实现
通过继承HttpServlet类,重写doGet与doPost方法
3、多个Servlet之间的调用规则
(1)、重定向:
response.sendRedirect("请求地址");
(2)、请求转发:
request.getRequestDispatcher("/资源文件名.html").forward(request, response);
请求转发与重定向区别:
1、对于请求转发的页面,可以是WEB-INF包中页面;重定向的页面,是不能为WEB-INF包中页面。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问 WEB-INF中资源的。
2、请求转发:浏览器发出了1次请求,得到了1次响应;请求重定向:浏览器发出了2次请求,得到了2次响应
3、请求转发与重定向都不和视图解析器一同工作,就当项目中无视图解析器
Servlet规范中的四种数据共享方案
1、ServletContext对象(全局作用域对象):服务器运行期间均有效
2、Cookie对象:通过cookie保存用户信息,默认情况下,浏览器关闭,cookie销毁
3、HttpSession对象(会话作用域对象):建立私人储物柜
4、HttpServletRequest对象(请求作用域对象)
Cookie的工作原理:
Cookie是Web服务器生成,向用户浏览器发送的一小段ASCII文本。当浏览器接收到后,会将其信息片段以“键-值”对的形式保存在某个目录下的文本文件中。以后每次向同一个服务器发送请求的时候,浏览器都会发送以前存储在本地的Cookie。浏览器和服务器通过HTTP协议进行通讯,Cookie便被保存在HTTP的请求部分(Set-Cookie)。默认情况下,浏览器关闭,cookie销毁
Session的工作原理
1、Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。
2、工作原理:
客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把session 的ID发送给客户端,客户端再存储到浏览器cookie中。这样客户端每次访问服务器时,都会带着session的ID,服务器拿到session的ID之后,在内存找到与之对应的session这样就可以进行有状态的会话。
当客户端禁用cookie时,session能否继续使用
可以使用,session只是依赖cookie存储session的ID,当cookie被禁用了,可以使用url中添加session的ID的方式保证session能够正常使用。
HttpSession对象与Cookie对象的区别
1、存储位置
(1)、Cookie对象:存放在浏览器缓存中(客户端计算机)
(2)、HttpSession对象:存放在计算机的内存中(服务器计算机)
2、共享数据类型
(1)、Cookie对象:存储共享数据类型只能是String
(2)、HttpSession对象:存储共享数据类型为Object
3、数据数量
(1)、一个Cookie对象只能存储一个共享数据
(2)、HttpSession对象可使用Map集合存储任意数量的共享数据
4.、参照物不同:
(1)、Cookie相当于客户在服务端【会员卡】
(2)、HttpSession相当于客户在服务端【钥匙】
JSP的底层原理:
1、JSP会代替响应对象,将Servlet中的doGet/doPost的执行结果写入到响应体中。
2、Tomcat服务器将jsp文件编译成.java类,这个类继承自HttpJspBase类,而HttpJspBase类又是Httpservlet的实现类,所以这个由服务器生成的java类是Servlet的子类,这也就解释jsp文件为什么能处理用户请求。
JSP的九大内置对象:
1、request:封装客户端的请求,其中包含来自get 或 post 请求的参数;
2、response:封装服务器对客户端的响应;
3、pageContext:通过该对象可以获取其他对象;
4、session:封装用户会话的对象;
5、application:封装服务器运行环境的对象;
6、out:输出服务器响应的输出流对象;
7、config:web 应用的配置对象;
8、page:jsp页面本身(相当于java程序中的this);
9、exception:封装页面抛出异常的对象。
Servlet与JSP的作用域对象
1 、Servlet三大域对象:
(1)、ServletContext对象(全局作用域对象)
(2)、HttpSession对象(会话作用域对象)
(3)、HttpServletRequest对象(请求作用域对象)
2 、JSP四大域对象:
(1)、ServletContext对象(全局作用域对象)
(2)、HttpSession对象(会话作用域对象)
(3)、HttpServletRequest对象(请求作用域对象)
(4)、PageContext对象(单前页作用域对象)
XML的解析方式:
XML的解析方式分为四种:参考
1、DOM解析(基础方式):
每加载一个标签生成一个DOM对象,当所有标签加载完毕后会自动创建一个DOM树,浏览器会自动生成一个document对象。
优点:
(1)、形成了树结构,有助于更好的理解、掌握,且代码容易编写。
(2)、解析过程中,树结构保存在内存中,方便修改。
缺点:
(1)、由于文件是一次性读取,所以对内存的耗费比较大。
(2)、如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。
2、SAX解析(基础方式):
优点:
(1)、采用事件驱动模式,对内存耗费比较小。
(2)、适用于只处理XML文件中的数据时。
缺点:
(1)、编码比较麻烦。
(2)、很难同时访问XML文件中的多处不同数据。
3、JDOM解析(扩展方式):
特征:
(1)、仅使用具体类,而不使用接口。
(2)、API大量使用了Collections类。
4、DOM4J解析(扩展方式):
特征:
(1)、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
(2)、它使用接口和抽象基本类方法。
(3)、具有性能优异、灵活性好、功能强大和极端易用的特点。
(4)、是一个开放源码的文件