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,一经查实,立即删除!

相关文章

不需要软著的安卓应用市场_哪些安卓应用市场上架应用比较简单啊,不需要软著啊?公司开发的 APP 着急上架...

ENNRIaaa:我看华为、360 、应用宝都需要软著kerb15:酷安?yuluo01:推广到位,网站下载都可以一个很冷门的领域,佛教 Appavalon8:我姐夫,佛教文化爱好者,研究佛教相关资料几…

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

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

stringbuffer_StringBuffer的存在的含义

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

python find函数实现原理_非常干货:Python 探针实现原理

△点击上方“Python猫”关注 ,回复“1”领取电子书剧照 | 《棋魂》原文:https://segmentfault.com/a/1190000004889212大家好,我是猫哥。关于 Python 中探针的运用,我之前写过一篇《由浅入深:Python 中如何实现自动导入…

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

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

云盘存储 教学反思_wps轻松办公优秀教学设计范文

wps轻松办公优秀教学设计范文[教学目的与要求]1.学会登录“WPS轻办公”2.学会保存、打开“云文档”3.学会把文档以图片的方式分享到“微博”4.通过观察“WPS轻办公”,了解“WPS轻办公”,初步会用“我的圈子”功能。[教…

Adobe PhotoShop(PS) for Mac 快捷键/PS快捷键

文章目录综合类图层视图工具箱综合类 功能说明快捷键打开文件Command O创建文档Command N存储为Web格式Command Option Shift S自由变换Command T切换到最初状态Option Command Z重做Shift Command Z自定义快捷键Option Command Shift K首选项Command K色阶Comman…

spring启动执行_执行器的Spring启动和安全性事件

spring启动执行Spring Boot Actuator提供了审核功能,用于在启用了Spring Security的Spring Boot应用程序中发布和侦听与安全相关的事件。 默认事件是身份验证成功,身份验证失败和访问被拒绝,但是可以使用自定义事件进行扩展。 确保在项目中启…

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

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

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

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

敏捷中gwt含义_在GWT中序列化/反序列化Json

敏捷中gwt含义JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践。 这篇文章旨在突出其重点。 到目前为止,在GWT中有三种将对象转换为JSON并从客户端转换回JSON的方法: gwt-jack…

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

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

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

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

ASCII编码/Unicode编码

码位与字符的对照关系表(编码字符集) ASCII 码表,American Standard Code for Information Interchange,美国信息交换标准代码 Unicode 码表,万国码,几乎全球国家的字符都可以表示,也是用来表示…

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

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

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

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

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

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

常量和字面量的区别

字面量 是指由字母,数字等构成的字符串或者数值,它只能作为右值出现,所谓右值是指等号右边的值,如:int a123这里的a为左值,123为右值。 常量 常量和变量都属于变量,只不过常量是赋过值后不能…

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…

slice_Spring Boot Web Slice测试–示例

sliceSpring Boot 引入了一段时间的测试切片 &#xff0c;花了我一些时间来研究它并探索它的一些细微差别。 背景 使用此功能的主要原因是减少样板。 考虑一个看起来像这样的控制器&#xff0c;仅适用于使用Kotlin编写的各种控制器。 RestController RequestMapping("/u…