Java Web 工作原理
TCP/IP 协议
应用层:我们编写的程序位于应用层,应用程序和是TCP/UDP 打交道。 http/ftp
传输层:TCP/UDP
网络层:IP层
数据链路层*物理层:以太网,ATM ,硬件的接口
------------------物理传输介质----------------------
三次握手:
第一次:客户端发送信息(ACK = 0 (单方面的); SYN = 1(请求链接)SEQ(随机码))
第二次:服务器接到请求了:服务器回复:ACK = 1 ; SYN = 1, SEQ+1 回复过去 通过随机码进行响应,来确定响应谁。
第三次: 客户端回复
具体下图:
客户端 服务器(被动打开)
1. -----------ACK=0,SYN=1,seq = x----------------->
2. <----------ACK=1,SYN=1,ack = x+1 seq = y--------
3. -----------ACK=1,seq = x+1,ack = y+1----------> (服务器就知道这个用户链接有效)
ACK:表示响应
SYN:表示建立连接
ack:表示确认码
seq:表示顺序码
client
1.创建socket()
2.连接指定的计算机。connect(); (ip/端口)
3.send():往socket写入信息。
4.关闭socket
Server:
1.被动创建Serversocket()
2.bind():绑定socket和端口号
3.调用listen() 监听端口
4.accept():接收客户端传递过来的内容。
5.读取字符
6.关闭
HTTP协议
解释http协议:
- 表示的超文本传输协议。是计算机网络通信中的一种规则,属于应用成协议。端口号是80. ftp是文件传输协议,端口是21。
- http遵循请求/响应模型:所有的通信都构造在请求响应模型中,客户端和服务器交换数据。
- http是一种无状态协议:客户机和服务器之间不需要建立持久的连接,通信完就断开。
当前http版本号: 版本号 1.1 (默认是一直保持连接的,访问一个url,发送多次请求,只依靠一个tcp连接就可以了。)
HTTP工作流程
客户端和服务器建立连接。new Socket()
客户端往服务器发送请求。
a.请求行:请求的方法,http版本 b.请求头:http头传递的元信息。告诉服务器客户端的一些信息 c.空行:发送回车符或者空格,用来区分请求头和消息体。 d.消息体:存放用户传输的内容。 只针对post请求。
服务器响应内容。
a.状态行:http版本,状态码。 b.响应头:包括了内容的描述,长度,时间戳,服务器的信息。 c.空行:发送回车符或者空格。 d.消息体:响应的内容。
服务器关闭连接,客户端解析服务器发送回来的内容。
Web服务器的缺陷
因为web服务器是被设计用来向客户端提供HTTP服务的,它只能向客户端提供静态的网页内容,不能创建动态服务器端内容。
解决方案一:CGI
解决方法用:CGI
优点:可以用多种语言编写。
缺点:每次访问都会创建一个进程。是多进程的。
java的解决方案
Servlet
采用Servlet与web容器设计来解决CGI效率的问题。会创建一个健壮的环境。
运行在web服务器或者应用程序上面的一个java程序,主要用于生成动态的内容。
是与平台无关的一个java程序。
Servlet : 是多线程的。
特点:
- 是常规的java代码,只是用了新的API,不涉及新的语法。
- 有一些不熟悉的重要语句。不属于j2se 属于单独的规范
- Servlet 对标准类(HttpServlet)进行了扩展
- Servlet 是没有main方法的。
Servlet的主要任务:
1. 读取客户端发送的显式和隐式的数据
2. 生成结果
3. 向客户端发送显式的数据(即文档)和隐式的数据(HTTP响应数据)
Web容器
什么是web容器:
Servlet受控于另外一个java应用程序,这个应用程序称为web容器。
Web容器负责管理和运行Servlet。
容器对Servlet的支持包括:
- 通信支持
- 生命周期管理
- 多线程支持
- jsp支持
- 处理安全性(限制哪些可访问和不可访问)
Web容器主要是用于给处于容器中的应用程序组件(Servlet,JSP)提供一个运行环境、是Servlet、JSP直接跟容器中的环境变量交互。这样,我们就可以把注意力放在Servlet的实现业务逻辑上。不必关注其他系统问题
web容器主要是由web服务器来实现的。
常见的web服务器:
- IIS —微软提供的
- Apache
- Tomcat —web容器
- Jboss —支持ejb(重量级框架)的容器
- weblogic —有分布式的功能
tomcat:
tomcat是源于apache 基金会里面的一个项目。它是一个优秀的web容器,又是一个http服务器。
特点:开源,稳定,高效,免费。
tomcat目录结构:
bin:存放启动和关闭tomcat的脚本文件
coaf:存放tomcat的各种配置
lib:存放的是服务器支撑的jar包
logs:主要存放日志文件
temp:存放临时文件
webapps:web应用的存放目录,外界能够访问的web应用程序。
work:工作目录 , jsp生成的代码。
javaweb工程的结构
工程名字
src : 存放代码
WebRoot :
WEB-INFO :客户端无法访问
lib:存放支撑项目的jar包
classes:存放当前代码的编译文件
web.xml :工程的配置文件
html文件夹
css文件夹
js文件夹
image文件夹