tomcat应用服务器有哪些,手写一个Tomcat应用服务器

mytomcat

项目简介

自己实现的简易的Tomcat

92c58af7b57a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Tomca

实现说明

Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,我们可以通过实现它来深刻了;了解它的实现原理。

考虑自己实现一个Tomcat,都有哪些关键的要点呢?

第一,提供 Socket 服务

Tomcat 的启动,必然是 Socket 服务,只不过它支持 HTTP 协议而已!

这里其实可以扩展思考下,Tomcat 既然是基于 Socket,那么是基于BIO or NIO or AIO 呢?

第二,进行请求的分发

要知道一个 Tomcat 可以为多个 Web 应用提供服务,那么很显然,Tomcat 可以把 URL 下发到不同的Web应用。

第三,需要把请求和响应封装成`request / response

我们在 Web 应用这一层,可从来没有封装过 request/response 的,我们都是直接使用的,这就是因为 Tomcat 替我们做好了这一步。

代码实现

工程目录结构:

92c58af7b57a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

工程目录结构.png

必要设置

工程设置

92c58af7b57a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

工程设置.png

启动设置

92c58af7b57a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

工程设置.png

测试

浏览器输入localhost:8080/girl并回车

92c58af7b57a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

测试1.png

浏览器输入localhost:8080/world并回车

92c58af7b57a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

测试2.png

控制台显示内容:

MyTomcat is Starting...

MyRequest{url='/girl', method='GET'}

MyRequest{url='/world', method='GET'}

TODO

使用解析web.xml的配置文件的方式替换硬编码。

使用NIO替换BIO。

参考资料:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SublimeText如何让代码的关键字高亮显示

如何设置不同语法的关键字高亮显示 假设你编写java代码,希望代码关键字高亮显示,你可以在菜单栏中选择「查看」-「语法」-「java」,勾选java即可,如下图: 当然,你也可以在页面右下角点击打开语法类型列表…

stringbuffer_StringBuffer的存在的含义

stringbuffer当我处理旧代码并在StringBuffer实例上运行时,通常将它们替换为StringBuilder实例。 尽管可以从此更改中获得性能优势,但我经常在我所知不会对性能产生明显影响的地方进行更改。 我认为,除了可能带来性能收益外,还应出…

服务器系统js文件报错,js服务器文件

js服务器文件 内容精选换一换登录Windows操作系统的弹性云服务器时,需使用密码方式登录。因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员密码(Administrator帐户或Cloudbase-init设置的帐…

系统运维包括哪些内容_智能养老系统包括哪些?养老管理系统内容详解

智慧养老成为养老产业新的发展热点,受到了社会各界的关注。智能养老系统利用先进的IT技术手段,开发面向居家养老、社区养老、机构养老的养老系统平台,提供实时、快捷、高效、物联化、智能化的养老服务,并将医疗服务、运营商、服务…

买了服务器之后如何操作系统,买了服务器之后如何操作系统

买了服务器之后如何操作系统 内容精选换一换如果您需要使用毕昇编译器,则需要先在服务端安装毕昇编译器。毕昇编译器基于开源LLVM开发,并进行了优化和改进,同时将flang作为默认的Fortran语言前端编译器,是针对鲲鹏平台的高性能编译…

图片高亮处理编程_GMT语法高亮-智能提示-代码补全插件

GMT(Generic Mappint Tools)是地学界应用非常广泛的一款绘图兼数据处理的开源软件。其开发团队也是非常活跃,此软件还在不断的发展和更新中,变得越来越强大。目前已经有164个模块,而每一个模块又有很多命令参数。因为gmt是命令行软件&#xf…

超时空机战服务器配置信息错误,超时空机战熔炉篇FAQ教你如何合理的使用熔炉...

在超时空机战这款游戏中,有一处是叫做熔炉的地方,在其中可以分解物品得到其他的物品,可是怎么才能更好的利用熔炉分解物品达到资源合理利用的地步呢,接下来就和小编一起分析一下吧。1.什么是熔炉,熔炉在哪里可以找到?…

tdd 单元测试_何时给定在单元测试和TDD中的重要性

tdd 单元测试最近,我一直在写与自动测试有关的更高级的概念(主要与Spock有关)。 但是,在进行测试培训时,我清楚地看到,通常对特定工具的知识并不是主要问题。 即使使用Spock,也可以编写肿且难以…

java 设计模式_Java设计模式的常见应用场景

一、Java I/O中的设计模式1、适配器模式适配器模式就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作。通常被用在一个项目需要引用一些开源框架来一起工作时,这些框架的内部都有一些关于…

abaqus实例_使用Python在ABAQUS中创建XYData数据

这篇的正题是要讲一个愚蠢的小故事,无奈之举,恐成笑柄。但是从PythonAbaqus前后处理的角度讲,还是有点意义的,所以才敢拿出来献丑。三年航天器型号研制工作干下来,积累了不少陋习,但内心还是想努力克服的。…

java学习笔记_Java学习笔记day11

Map集合java.util.Map<k,v>集合 Map集合特点&#xff1a; 1.Map集合是一个双列集合&#xff0c;一个元素包含两个值(一个key&#xff0c;一个value) 2.Map集合中的元素&#xff0c;key和value的数据类型可以相同&#xff0c;也可以不同 3.Map集合中掉元素&#xff0c;key…

几点减几点怎么列算式_[股票一般几点可以买入]股票缩量怎么买 | 爱淘股吧

股票一般买入绝技——缩量调整突破买入股票缩量怎么买下面就来详细说说几个买入绝技&#xff1a;第一种&#xff1a;伴随着成交量的缩减。(2)在缩量调整到尾声之后&#xff0c;突然出现一根放量大阳线。(3)大阳线的出现伴随着成交量的放大。其下一个交易日如果股价继续放量上攻…

mqtt服务器数据存储位置,mqtt服务器 数据库

mqtt服务器 数据库 内容精选换一换云服务器备份&#xff1a;云服务器备份可以对普通服务器进行整机备份或部分磁盘备份&#xff0c;不适用于部署了数据库等应用的服务器。支持备份弹性云服务器ECS和裸金属服务器BMS&#xff0c;成本相对于VBS较高&#xff0c;适合对需要备份整个…

固体加热_干货分享| |固体氧化物燃料电池

固体氧化物燃料电池属于第三代燃料电池&#xff0c;是一种在中高温下直接将储存在燃料和氧化剂中的化学能高效、环境友好地转化成电能的全固态化学发电装置。被普遍认为是在未来会与质子交换膜燃料电池一样得到广泛普及应用的一种燃料电池。一般的固体氧化物燃料电池发电系统包…

poi设置列宽自适应_Sentinel 系统自适应限流原理剖析与实战指导

1、Sentinel 系统自适应概述从官方了解到 Sentienl 系统自适应限流是一个全局的概念&#xff0c;对应用入口流量统一进行统一控制&#xff0c;结合应用的机器负载、CPU 使用率&#xff0c;总体平均响应时间、入口 QPS 和并发线程数等几个维度的监控指标从而决定是否调用进行限流…

Hibernate架构概述

下图提供了Hibernate体系结构的高级视图&#xff1a; 最小的架构 “最小”架构使应用程序管理其自己的JDBC连接&#xff0c;并将这些连接提供给Hibernate&#xff1b; 此外&#xff0c;应用程序自行管理交易。 这种方法使用了最少的Hibernate API子集。 综合架构 Hibernate B…

一个服务器多个网站收录效果,8个优化小技巧快速提高网站收录

网站做好了&#xff0c;我们肯定是想要有更多的免费流量进入到我们的网站&#xff0c;那么我们就必须要了解如何快速提升网站收录。下面小编就来给大家分享一下SEO优化中快速提高网站收录的8个优化小技巧&#xff0c;希望对大家有所帮助。1、网站权重评级网站的权重是对于收录影…

铺铜过孔不要十字_谈谈商周青铜器上圈足的镂孔现象

在商代铜器和西周早期的铜器上&#xff0c;常常会看到带有圈足的器物&#xff0c;圈足有的会有一个孔洞&#xff0c;孔洞的形制有圆形的、十字形的、不规则圆形的等&#xff0c;如簋、觚、盘、豆、尊、罍、瓿、卣、觯、壶等&#xff0c;如下&#xff1a;最近&#xff0c;我们读…

gwt格式_GWT的渐进式Web应用程序配方

gwt格式渐进或不渐进… 如果您已经设计或开发Web应用程序已有一段时间&#xff0c;那么您可能会遇到无数次“渐进式Web应用程序”一词&#xff0c;并且可能会在未来几年内使用。 您可能想知道PWA的确切定义是什么&#xff0c;如何识别PWA&#xff0c;以及如何构建PWA。 根据字典…

光学定位与追踪技术_如何为射线光学仿真创建复杂的透镜几何结构

“射线光学模块”扩展了 COMSOL Multiphysics 软件的建模功能,允许用户引入射线追踪仿真。有了该模块&#xff0c;在集成软件环境中对复杂光学系统的热性能、结构及其他方面进行高阶研究不再是一个难题。创建几何模型是仿真成功的第一步。本文以 Petzval 透镜为例&#xff0c;探…