HTTP与Tomcat
文章平均质量分 84
纵横千里,捭阖四方
弱小,是最大的罪过;没有行动,梦想终究是想一想
展开
-
【Tomcat与网络11】如何自己实现一个简单的HTTP服务器
HTTP启动之后要持续监听,所以我们可以使用NioServer中的Handler就可以了,在修改后的HttpHandler中首先获取到请求报文并打印出报文的头部,包括协议的首行、请求方法的类型、Url和Http版本等,之后将接收到的请求消息(也就是报文信息)封装在一起,最后将这些信息打包成一个报文发送给客户端。这段代码看似简单,其实包含的逻辑并不少,我们可以看到这里是从key获得Socket通信使用了哪个通道(对于HTTP的就是不同端口号),这个key是哪里的呢?这相当于老板让你干活的时候,给你的锤子。原创 2024-02-01 12:22:22 · 659 阅读 · 0 评论 -
【Tomcat与网络10】Tomcat I/O和线程池的并发调优
前面我们看了提高Tomcat启动速度的措施,这里我们看一下如何提高Tomcat的性能。Tomcat 的调优涉及 I/O 模型和线程池调优、JVM 内存调优以及网络优化等,今天我们来聊聊 I/O 模型和线程池调优,由于 Web 应用程序跑在 Tomcat 的工作线程中,因此 Web 应用对请求的处理时间也直接影响 Tomcat 整体的性能,而 Tomcat 和 Web 应用在运行过程中所用到的资源都来自于操作系统,因此调优需要将服务端看作是一个整体来考虑。原创 2024-01-31 23:54:00 · 1081 阅读 · 0 评论 -
【Tomcat与网络9】提高Tomcat启动速度的八大措施
本文我们来看一下如何对Tomcat进行调优,我们对于Tomcat的调优主要集中在三个方面:提高启动速度、提高系统稳定性和提高并发能力,后两者很多时候是相辅相成的,我们放在一起看。Tomcat现在一般都嵌入在SpringBoot里,极少会干这个事情,这里还是参考了李号双老师的文章来陈述。原创 2024-01-31 23:50:08 · 1247 阅读 · 0 评论 -
【Tomcat与网络8】从源码看Tomcat的层次结构
在前面我们介绍了如何通过源码来启动Tomcat,本文我们就来看一下Tomcat是如何一步步启动的,以及在启动过程中,不同的组件是如何加载的。一般,我们可以通过 Tomcat 的 /bin 目录下的脚本 startup.sh 来启动 Tomcat,如果是window那就用startup.bat来启动。那我们执行了这个脚本后发生了什么呢?在一篇中,我们看到tomcat启动是从类Bootstrap里的Main方法开始的,因此对于Tomcat而说,Bootstrap就是创造万物的工具。原创 2024-01-31 23:06:20 · 1230 阅读 · 0 评论 -
【Tomcat与网络7】亲测有效—如何用idea运行Tomcat9的代码
前面我们看了很多理论,但是总感觉少了什么?少了什么呢?亲手搞一下Tomcat源码,至少要将源码运行起来玩玩吧。今天我们就来看一下如何在idea中运行Tomcat源码。原创 2024-01-31 20:21:12 · 372 阅读 · 0 评论 -
【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?
学习Tomcat的时候,有很多绚丽的技术值得我们学习,但是个人认为Tomcat的线程池扩展是最值得研究的一个部分,线程池的应用太广了,也重要了,Java原生线程池的特征我相信很多人都背过,那Tomcat为什么要扩展以及如何拓展的呢?这个问题理解了面试的时候就可以提升一下逼格。在开发中我们经常会碰到“池”的概念,比如数据库连接池、内存池、线程池、常量池等。为什么需要“池”呢?原创 2024-01-31 08:29:48 · 1325 阅读 · 0 评论 -
【Tomcat与网络5】再论Tomcat的工作过程与两种经典的设计模式
前面两篇,我们重点分析了Tomcat的容器和连接器的基本设计,今天我们来看一下两个机构如何在service的调度下进行协同工作的。原创 2024-01-30 23:53:32 · 1239 阅读 · 0 评论 -
【Tomcat与网络4】Tomcat的连接器设计
下面我来详细介绍这两个顶层组件 ProtocolHandler 和 Adapter。ProtocolHandler 组件由上文我们知道,连接器用 ProtocolHandler 来处理网络连接和应用层协议,包含了 2 个重要部件:EndPoint 和 Processor,下面我来详细介绍它们的工作原理。EndPointEndPoint 是通信端点,即通信监听的接口,是具体的 Socket 接收和发送处理器,是对传输层的抽象,因此 EndPoint 是用来实现 TCP/IP 协议的。原创 2024-01-30 23:31:24 · 1057 阅读 · 0 评论 -
【Tomcat与网络3】Tomcat的整体架构
Context 确定后,Mapper 再根据 web.xml 中配置的 Servlet 映射路径来找到具体的 Wrapper 和 Servlet。看到这里,我想你应该已经了解了什么是容器,以及 Tomcat 如何通过一层一层的父子容器找到某个 Servlet 来处理请求。需要注意的是,并不是说只有 Servlet 才会去处理请求,实际上这个查找路径上的父子容器都会对请求做一些处理。原创 2024-01-30 23:10:28 · 1146 阅读 · 0 评论 -
【Tomcat与网络2】一文理解Servlet是怎么工作的
其中最重要是的 service 方法,具体业务类在这个方法里实现处理逻辑。这个方法有两个参数:ServletRequest 和 ServletResponse。ServletRequest 用来封装请求信息,ServletResponse 用来封装响应信息,因此本质上这两个类是对通信协议的封装。比如 HTTP 协议中的请求和响应就是对应了 HttpServletRequest 和 HttpServletResponse 这两个类。原创 2024-01-30 20:01:58 · 1380 阅读 · 0 评论 -
20240128周报-网络太杂,Tomcat太难
今天来做个小总结吧,之前说想用几个月的时间将Java生态给整理一遍,该工作已经进入第三周了。先和各位老老板汇报一下上一周的工作,然后说一下本周的计划和后面的计划。原创 2024-01-30 08:36:51 · 676 阅读 · 0 评论 -
【Tomcat与网络1】史前时代—没有Spring该如何写Web服务
在前面我们介绍了网络与Java相关的问题, 最近在调研的时候发现这块内容其实非常复杂,设计的内容多而且零碎,想短时间梳理出整个体系是不太可能的,所以我们还是继续看Tomcat的问题,后面有网络的内容继续补充吧。Servlet是Java Web的核心机制,而实现Servlet最好的服务器无疑就是Tomcat。在前面我们介绍了如何用Java实现网络通信,这个与自己实现一个Servlet服务器,比如Tomcat 还差多少呢?差十万八千里,有一个挺好玩的图:目前各类Spring的材料实在太多了,我们用的也多。原创 2024-01-26 23:41:19 · 1057 阅读 · 0 评论 -
【Java与网络6】实现一个自己的HTTP浏览器
前面我们讨论了HTTP协议的基本结构和Socket编程的基本原理,本文我们来整个大活:自己实现一个简单的Web服务。在讨论HTTP协议的具体请求和响应头字段之前,让我们先来利用以前所学的知识来实现一个HTTP模拟器。所谓HTTP模拟器就是可以在用户输入HTTP的请求消息后,由这个模拟器将HTTP请求发送给相应的服务器,再接收服务器的响应消息。这个HTTP模拟器有几下特点:1. 可以手工输入HTTP请求,并向服务器发送。2. 接收服务器的响应消息。原创 2024-01-26 17:55:24 · 1272 阅读 · 0 评论 -
【Java与网络5】十分钟实现一个自己的Socket服务器和客户端
由于本例使用了127.0.0.1,因Server和Client类必须在同一台机器上运行。在类Server类中只使用了ServerSocket类的accept方法接收客户端的请求。并从客户端传来的数据中读取两行字符串,并显示在控制台上。在前面我们去请求了外部的网站,如果我们要自己实现自己的服务端和客户端该如何做呢?如果要做一个完整的服务器是非常复杂的,但是想简单写一个能通信的还是挺容易的。功能就这么简单,简简单单十来行就实现了,废话就不多说了,下一篇继续!原创 2024-01-26 17:26:41 · 440 阅读 · 0 评论 -
【Java与网络4】Java网络编程-感受通过Socket实现网络通信
网络编程最大的作用实现不同机器之间通信。不管多么复杂的系统或网络,本质上到最后都是两个机器进行通信,一般我们把发送请求的一方称为客户端,接收请求的一方称为服务端。因此接下来我们就开始进行客户端和服务端的设计。Socket类是负责处理客户端通信的Java类,通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据。在本文中,我们将讨论使用Socket类的基本步骤和方法。一般网络客户端程序在连接服务程序时要进行以下三步操作。1. 连接服务器。原创 2024-01-26 17:14:58 · 957 阅读 · 0 评论 -
【Java与网络3】Java网络编程之初体验
我们平时极少使用Java来直接写网络通信相关的程序,一般都使用Tomcat Web服务或者Netty等框架来帮助我们做,不过呢,要想将技术学到家,我们研究一下基本的网络编程还是非常必要的,这样可以让我们将很多内容融会贯通,更加通透。本文,我们就来练习一下相关内容。原创 2024-01-26 11:28:05 · 926 阅读 · 0 评论 -
【Java与网络2】:HTTP核心知识与Curl工具
对于网络,我们更多是在实践中应用,其中cURL是在命令行下工作的文件传输工具。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。curl支持的协议非常多,cURL支持的通信协议有: FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。原创 2024-01-26 09:51:32 · 1309 阅读 · 0 评论 -
【Java与网络1】:从HTTP协议看如何提高自己的资历
提到网络,我们往往更多关注的是IP、TCP、UDP等内容,当我们提到Java,我们更多关心的是JavaWeb、Tomcat等等,而他们之间的桥梁—HTTP协议,往往没有引起太多的重视 ,也许是因为这一块内容比较简单,也许是学习其他内容花费了我们比较多的精力。原创 2024-01-24 08:54:05 · 818 阅读 · 0 评论