web应用程序的组成:
网页:浏览器需要显示的内容
Web浏览器:1.向Web服务器发出请求
2.解析网页,渲染显示给用户
Web服务器:1.提供Web服务
2.存放Web应用程序
HTTP协议:Web浏览器和Web服务器之间的相互通讯
解析HTTP协议
什么是HTTP协议?超文本传输协议,是客户端(浏览器)和服务器通讯的一种标准。一套计算机在网络中通讯的规则。位于TCP/IP协议族的顶层(应用层)。
HTTP协议的特点:
1.遵循请求/响应模式
2.无状态的协议--浏览器和服务器不需要建立持久的连接,浏览器发出请求,服务器返回响应,连接就断开
3.http协议的端口为80
HTTP的处理流程:
1.客户端(浏览器)和服务器建立连接(三次握手机制)
2.客户端(浏览器)向服务器发出HTTP请求
3.服务器向客户端(浏览器)回发HTTP响应
4.客户端(浏览器)和服务器关闭连接(四次挥手机制)
三次握手和四次挥手
三次握手:第一次握手,客户端向服务器端发送标有SYN的数据包
第二次握手,服务器端向客户端回发标有SYN/ACK的数据包
第三次握手,客户端向服务器端发送标有ACK的数据包
四次挥手:第一次挥手,客户端发送一个FIN到服务器端,用以关闭客户端到服务器端的数据传送
第二次挥手,服务器端收到FIN后,发送一个ACK给客户端
第三次挥手,服务器端发送一个FIN到客户端,用以关闭服务器端到客户端的数据传送
第四次挥手,客户端收到FIN后,发送一个ACK给服务器端
HTTP请求信息:从上到下----请求行、请求头、空行、消息体
1.请求行:描述请求方式、请求URL,及HTTP协议的版本
2.请求头:以键值对的方式描述客户端的信息
3.空行:标识请求头的结束
4.消息体:描述客户端请求的表单数据(POST请求)
HTTP请求方式:
GET POST HEAD OPTIONS PUT DELETE TRACE CONNECT
其中GET--做资源的获取、POST--做数据的传输、PUT--做数据的修改、DELTE--做数据的删除-----用得较多
GET和POST区别:
1.请求信息格式(流格式)的区别:
GET方式的表单数据附加在URL后面,所以没有消息体
POST方式有消息体,在消息体中描述表单数据
(表单数据如何查看--浏览器-->右键-检查-->network-->Headers查看请求或响应头,Payload查看表单数据)
2.用途区别:
GET方式主要用于资源的查找,POST方式主要用于数据的传输(如上传文件)
3.传输性能的区别:
GET方式只能提交数据量小的文本数据,POST方式可以提交大文本数据,还可以提交二进制数据。GET方式提交的数据会在浏览器地址栏中显示,POST方式提交的数据不会再浏览器地址栏中显示,相对安全。
GET和POST的选用
1.请求静态页面或图形文件使用GET方式,做资源的查找
2.发送大数据时,用POST方式
3.上传文件时,用POST方式
4.发送用户名和密码或者其他保密信息时,用POST方式
HTTP响应信息-- 从上到下,状态行 响应头 空行 消息体
状态行:描述HTTP协议版本、状态码、响应描述
响应头:以键值对方式描述服务器相关的信息,如内容格式
空行:标识响应头的结束
消息体:服务器发送给客户端的具体数据
HTTP协议的响应状态码有5种
100-199:表示信息性代码,标识客户端应该采取其他的动作,请求正在进行
200-299:表示客户请求成功
300-399:表示用于已经移走的资源文件,指示新的地址
400-499:表示由客户端引起的错误
500-599:表示由服务器端引起的错误
响应头中的信息:content-type--由MIME类型表示
什么是MIME类型?设定某种拓展名的文件用一种应用程序打开的方式类型。当该拓展名文件被访问时,浏览器会自动使用指定的应用程序打开。
常见的MIME类型有:
text/html html页面文本数据 text/css css文件数据 text/xml xml数据 application/x-javascript js数据
application/json json数据
image/gif gif图片数据 image/png png图片数据 image/jpeg jpg图片数据
辅助应用
为解决Web服务器无法动态响应信息的缺陷,在Web服务器之后增加了辅助应用来动态生成响应信息。
在Java中,采用Web容器+Servlet方式作为辅助应用的解决方案。
什么是Servlet?Servlet又是如何诞生的呢?
Servlet 是 Server Applet的缩写,服务器端小程序,是一种使用Java开发动态网页的技术。
如果不嫌麻烦,可以使用Java动态生成网页的相应API去完成动态网页的开发,但是此时需要做很多事,解析HTTP请求,解析HTTP响应呀等。为了省事(偷懒)-简化开发,把动态生成网页的Java API进行了封装,形成了一套新的API,称为Servlet API。
Servlet API的结构
Servlet接口 ServletConfig接口
GenericServlet
HttpServlet
严格的说,Servlet只是一套Java Web开发的规范(技术标准)。只有规范(标准)并不能做任何事,必须要实现规范(标准)。所谓实现规范,就是书写代码来完成Servlet规范中提到的各项功能。
public TestServlet implements Servlet{ // 实现接口方法 }
Servlet又提供了两个抽象类 GenericServlet和HttpServlet,它们都实现了Servlet中的很多常用功能,可以通过继承这两个抽象类的方式简化Servlet的编写。
public TestServlet extends GenericServlet{ // 实现Service方法 }
HttpServlet继承于GenericServlet,用于开发基于HTTP协议的Servlet程序。
Web 容器
就是Servlet程序的运行环境,它实现了Servlet规范定义的各种接口和类,为Servlet的运行提供底层支持,还可以管理由用户书写的Servlet类,比如,初始化Servlet等
Web容器的作用:
1.通讯支持
2.Servlet生命周期的管理
3.线程支持
4.jsp支持
5.处理安全性
Servlet的生命周期:
1.容器加载并实例化Servlet
2.调用init方法完成初始化
3.当请求到达,调用service()方法,处理请求,产生响应
4.销毁阶段,容器调用destroy()方法,完成资源清理
常用的Web容器,Tomcat、Jboss,WebLogic等,我们选用Tomcat。和以往大家接触的外置安装Tomcat的形式不同,我们使用内置tomcat的形式--使用Java代码书写Tomcat容器。
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.36</version> </dependency>