How Tomcat Works, A Guide to Developing Your Own Java Servlet Container
时间:2022-05-04
本文章向大家介绍How Tomcat Works, A Guide to Developing Your Own Java Servlet Container,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.1 socket网络通信基础
客户端使用主机地址和端口实例化一个socket,此socket通过输出流将字符串等传向服务器主机。
服务器使用端口号实例化一个serverSocket,调用accept()方法监听此端口,等待客户端的连接。一旦连接成功,就可以获取到输入流,将客户端通过网络发送的字符串读取到;也可以获取输出流,将自己的反馈信息发给客户端(客户端获取输入流就可以读到反馈信息)。
ServerSocket serverSocket = new ServerSocket("8080",1,"客户机1");
Socket socket = serverSocket.accept();
input = socket.getInputStream();
// 处理
// ...
output = socket.getOutputStream();
1.2 Http服务器的原理
http服务器就是通过以上介绍的原理来接收HTTP请求的,只是它接收到的是完全按照http协议格式的请求字符串。在服务器被连接(accept())后,就可以获得输入流和输出流,使用它们可以实例化一个请求和一个响应对象。
ServerSocket serverSocket = new ServerSocket("8080",1,"客户机1");
Socket socket = serverSocket.accept();
input = socket.getInputStream();
Request request = new Request(input);
service(request,response);
output = socket.getOutputStream();
Response response = new Response(output);
1.3 Request类
Request类要做的事情就是从输入流中接收字符串,并将一个完全符合http协议的请求字符串分解为一个Request对象。
根据上图,使用indexOf()以及subString()等方法就可以将字符串分解,并将各部分的值封装在Request对象中。
1.4 Response类
Response类需要将响应的字符串按照http响应的格式写到输出流中去。
- 【Java学习笔记之十五】Java中的static关键字解析
- Codeforces 839D Winter is here【数学:容斥原理】
- Codeforces 839C Journey【DFS】
- Facebook的漏洞可以让攻击者在分分钟内重置用户账户密码
- 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
- 【机器学习笔记之六】Bagging 简述
- 洛谷 P1553 数字反转(升级版)【字符串+STL stack】
- C# 实现发送手机短信
- 软件测试人员必须掌握的Linux基本命令
- 【机器学习笔记之五】用ARIMA模型做需求预测用ARIMA模型做需求预测
- Capturing Packets in Linux at a Speed of Millions of PPS
- 【机器学习笔记之四】Adaboost 算法
- 【Java学习笔记之十九】super在Java继承中的用法小结
- 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Git 客户端保存用户名和密码
- SAP WebClient UI component模型元数据解析工具
- 设计模式之抽象工厂模式
- 测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
- 设计模式之代理模式
- SQL Server 中的 ROW_NUMBER 函数
- NHibernate 批量数据插入测试
- MvvmCross 框架中 ViewModel 之间的导航以及生命周期
- 在 mono 下尝试 ASP.NET vNext
- 设计模式之享元模式
- 设计模式之外观模式
- 设计模式之装饰器模式
- 设计模式之桥模式
- 笔试编程 | 二分查找、数组、排序
- Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件