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响应的格式写到输出流中去。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者常至

Hibernate 的一级缓存

1052
来自专栏顶级程序员

几张趣图助你理解HTTP状态码~

HTTP状态码(图一): ? 注释: 301—永久移动。被请求的资源已被永久移动位置; 302—请求的资源现在临时从不同的 URI 响应请求; 305—使...

3828
来自专栏北京马哥教育

基础拾遗--【转】什么是长连接、短连接?

什么是长连接,什么是短连接? 贴个经典的,看完了就应该没啥问题了 : TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可...

2838
来自专栏ml

jsp有关resquest与session和application的区别和相似性

   1. request 的setAttribute与getAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然...

3295
来自专栏Linyb极客之路

网络编程之HTTP协议结构

Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

813
来自专栏iOS 开发杂谈

浅谈如何在项目中处理页面中的多个网络请求

在开发中很多时候会有这样的场景,同一个界面有多个请求,而且要在这几个请求都成功返回的时候再去进行下一操作,对于这种场景,如何来设计请求操作呢?今天我们就来讨论一...

692
来自专栏KaliArch

HTTP 协议Note

名称含义:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。

1144
来自专栏LanceToBigData

JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

前言   前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一、request请求参数出现乱码问题 1.1、ge...

18710
来自专栏HTML5学堂

PHP中POST和GET的区别

HTML5学堂:在JavaScript当中,存在“get和post方法的区别”这一辨析知识。其实get和post是向服务器端请求/提交数据的两种方式。对于PHP...

2735
来自专栏别先生

Servlet过滤器,Servlet过滤器创建和配置

第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。       ...

1979

扫描关注云+社区