您的位置:首页 > 运维架构 > Tomcat

JAVA 模拟TomCat服务器

2018-01-25 19:58 176 查看
一、模拟TomCat服务器

public class HttpServer{
//  服务器返回数据必要的数据头
private static String head = "HTTP/1.1 200 OK"
+"Connection: close"
+"\n\n";
public static void main(String[] args)throws IOExecption{
System.out.println("服务器启动");
//  端口: 80为默认端口,请求时可以省略不写
ServerSocket socket = new ServerSocket(8081);
//  等待浏览器请求
Socket brower = socket.accept();
//  一次性读取浏览器请求发来的请求头,避免阻塞
InputStream receiver = brower.getInputStream();
byte[] buf = new byte[1024];
int len = receiver.read(buf);
System.out.println(new String(buf,0,len));
//  如何给浏览器返回信息
OutputStream sender = brower.getOutputStream();
//  html  功能: 通过浏览器请求的路径,解析具体路径下的文件,转换成html的字符串
String html = "<font color = 'red' size='80'>Request Success</font>";
String msg = head+html;
sender.write(msg.getBytes());
//  服务关闭
brower.close();
socket.close();
}
}


浏览器发来的信息

连接状态 (注: 和HTTP协议相关)

Connection: keep-alive

用户代理

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

请求次数

Upgrade-Insecure-Requests: 1

支持的格式

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8

浏览器支持的压缩方式

Accept-Encoding: gzip, deflate, br

支持的语言

Accept-Language: zh-CN,zh;q=0.9

结束标记

\n\n

二、模拟客户端浏览器

public class HttpClient{
private static String head = "GET /Test/index.html HTTP/1.1\n"
+"Host: localhost:8080\n"
+"Connection: close\n"
+"\n";
public static void main(String[] args) throws UnknownHostException, IOEXception{
System.out<
9202
/span>.println("Brower request message...");
Socket brower = new Socket("localhost",8080);
PrintWriter sender = new PrintWriter(brower.getOutputStream(),true);
// 模拟浏览器发送请求头信息
sender.println(head);
// 接收tomcat返回的信息
BufferedReader receiver = new BufferedReader(new InputStreamReader(brower.getInputStream()));
String line = null;
while((line = receiver.readLine())!=null){
System.out.println(line);
}
brower.close();
}
}


HTTP 协议版本 : 状态码

HTTP/1.1 200 OK

服务的提供

Server: Apache-Coyote/1.1

支持的范围

Accept-Ranges: bytes

标记(token)

ETag: W/”304-1516331676000”

最后的修改时间

Last-Modified: Fri, 19 Jan 2018 03:14:36 GMT

返回的文本格式

Content-Type: text/html

返回的内容文本长度

Content-Length: 304

返回的时间

Date: Fri, 19 Jan 2018 06:39:47 GMT

连接方式

Connection: close

结束标识

\n
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: