Tomcat
协议:
约定规则
网络协议:
数据在网络上传输规则http,pop3,pop,imap,ftp,流媒体协议
Http协议:
超文本传输协议:如何在互联网上传输超文本
HTML:超文本标记语言
Http协议格式:
基于请求-响应模型:协议分为请求部分,响应部分
Http协议分为请求部分,响应部分
请求部分格式: 请求行 请求头 请求体
响应部分格式: 响应行 响应头 响应体
请求头:
作用:1.告诉服务器对客户端描述 2.对本次请求描述
Host:本次请求的主机路径
User-Agent:告诉服务端本次请求客户端所在的平台以及本次请求采用的浏览器百度中搜索:网速测试
Accept:用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受
GIF图像格式的资源:Accept:text/html,表明客户端希望接受html文本.
Accept-language:告诉服务端浏览器可以识别的语言种类
Accept-Encoding:告诉服务端,浏览器可以那些类型压缩格式数据gzip、defalte
请求体:
约定用户的表单数据向服务端传递格式
作用:存放客户端向服务器传递的数据
响应行:
HTTP/1.1 200 OK(回车换行)
本次响应采用的协议 状态码 状态描述
状态码;协议设计之初,用一些数字描述了本次响应
状态描述:用文字本次响应进行简短描述
状态码类型:
1xx:指示信息--表示请求已接受,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
响应头:
作用:1.服务端告诉浏览器服务端信息 2.对本次响应描述
格式:K1:v1 K2:v2 K3:v3 空行 响应体
Date:响应时间
content-Type:本次响应内容类型
content-Encoding:本次内容采用的压缩格式
content-length:本次内容长度
-- 实现Tomcat需要的技术铺垫:
1.HTTP协议
2.JavaSe 的Socket编程
3.搭建Tomcat服务器
-- 模拟客户端向服务端请求数据:
public static void main(String[] args) {
//1.建立一个Socket对象,链接itcast.cn域名的80端口
Socket socket = null;
InputStream is = null;
OutputStream os = null;
try {
socket = new Socket("www.itcast.cn",80);
//2.获取到输出该对象
is = socket.getInputStream();
//3.获取到输入该对象
os = socket.getOutputStream();
//4.将HTTP协议的请求部分发送到服务器/subject/about/index.html
os.write("GET /subject/about/index.html HTTP/1.1\n".getBytes());
os.write("Host: www.itcast.cn\n".getBytes());
os.write("\n".getBytes());
//5.读取来自服务端的数据打印到控制台
int i = is.read();
while((i) != -1){
System.out.print((char)i);
i = is.read();
}
//6.释放资源
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(null != is){
is.close();
is = null;
}
if(null != os){
os.close();
os = null;
}
if(null != socket){
socket.close();
socket = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
-- 模拟服务端响应客户端数据:
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
OutputStream os = null;
try {
//1.创建ServerSocket对象,监听本机的8080端口号
serverSocket = new ServerSocket(8080);
//为了每次客户端过来都能请求到
while(true){
System.out.println("MyTomcat启动成功!");
//2.等待来自客户端的请求获取和客户端对应的Socket对象
socket = serverSocket.accept();
//3.通过获取到的Socket对象获取到输出流对象
os = socket.getOutputStream();
//4.通过获取到的输出流对象将HTTP协议的响应部分发送到客户端
os.write("HTTP/1.1 200 OK\n".getBytes());
os.write("Content-Type: text/html; charset=UTF-8\n".getBytes());
os.write("Server: Tengine\n".getBytes());
os.write("\n\n".getBytes());
StringBuffer sfb = new StringBuffer();
sfb.append("<html>");
sfb.append("<head><titil>Welcome use is MyTomcat</title></head>");
sfb.append("<body>");
sfb.append("<h1>Hello, My name is baixin.</h1>");
sfb.append("<a href='www.baidu.com'>baiduPage</a>");
sfb.append("</body>");
sfb.append("</html>