mytomcat

项目简介

自己实现的简易的Tomcat

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 替我们做好了这一步。

代码实现

工程目录结构:

工程目录结构.png

必要设置

工程设置

工程设置.png

启动设置

工程设置.png

测试

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

测试1.png

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

测试2.png

控制台显示内容:

MyTomcat is Starting...

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

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

TODO

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

使用NIO替换BIO。

参考资料:

tomcat应用服务器有哪些,手写一个Tomcat应用服务器相关推荐

  1. 大佬说:怎么手写一个Tomcat然后给这个Tomcat 部署项目并且成功处理请求 ? 我TM当时就吓尿了!

    文章目录 前言 一.怎么部署项目? 二.分析以及思路 1.Tomcat的配置文件 2 web项目文件夹信息 2.初始化项目配置 定义映射类 加载配置文件 加载 server.xml 解析项目内容 解析 ...

  2. 手写一个基于NIO的迷你版Tomcat

    笔者也建立的自己的公众号啦,平时会分享一些编程知识,欢迎各位大佬支持~ 扫码或微信搜索北风IT之路关注 本文公众号地址:手写一个基于NIO的迷你版Tomcat 在很久之前看到了一篇文章写一个迷你版的T ...

  3. Tomcat(二):手写嵌入式tomcat

    一.什么是嵌入式tomcat 嵌入式tomcat:非传统的部署方式,将tomcat嵌入到主程序中进行运行. 二.嵌入式tomcat的优点 灵活部署.任意指定位置.通过复杂的条件判断 三.Maven集成 ...

  4. 【Tomcat】第十篇:手写嵌入式Tomcat插件(超简单)

    1.两种类型tomcat 传统tomcat:需要jar部署,通过BootStrap启动 嵌入式tomcat:maven引入Tomcat类,自定义启动插件(Connector,Engin,Host,Co ...

  5. 手写一个山寨版的springmvc框架

    文章目录 一,环境准备 二,项目结构搭建 三,简易版的前端控制器 DnDispatcherServlet 四,测试springmvc的性能 五,结束语 首先贴出来一张从网上copy下来的 spring ...

  6. 用Java手写一个微型下载资源网站

    文章目录 手写一个微型下载资源网站[Java实现用户注册.登陆.下载功能] 一.技术栈 二.流程分析图 注册 登陆 下载 三.案例实现效果 首页 注册 登陆 下载网主页 壁纸下载 书籍下载 影视下载 ...

  7. 【干货】JDK动态代理的实现原理以及如何手写一个JDK动态代理

    动态代理 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位.代理模式从类型上来说,可以分为静态代理和动态代理两种类型. 在解 ...

  8. vue @click 赋值_vue 手写一个时间选择器

    vue 手写一个时间选择器 最近研究了 DatePicker 的实现原理后做了一个 vue 的 DatePicker 组件,今天带大家一步一步实现 DatePicker 的 vue 组件. 原理 Da ...

  9. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!

    零.准备工作 <dependencies><dependency><groupId>mysql</groupId><artifactId>m ...

最新文章

  1. java 多线程共享数据_Java多线程学习:多个线程间共享数据
  2. 我的世界java版记分板_我的世界计分板教程 计分板指令详解
  3. 记忆化搜索,FatMouse and Cheese
  4. 免费的数据库建模工具
  5. xml模块 增删改查
  6. 【Elasticsearch】es 插入数据 性能优化 以及 影响插入的因素
  7. JetBrains 2017/2018全系列产品激活工具
  8. 那些非常好用的电脑软件
  9. 策划运营分会场:巴别时代 CEO--放开偏执,拥抱变革
  10. oracle pq distribute,详解Oracle hints PQ_DISTRIBUTE
  11. kernel日志时间转换python脚本(MTK)
  12. 认知系列4: 《认知突围》笔记
  13. 学栈和队列时的人生感悟
  14. 好课堂Scratch编程10 趣学篇(六)听题!格里芬的挑战
  15. 一些前端入门者可能需要的网站
  16. 养生996的崛起:马云为什么给他最痛恨的兔子军团站台?
  17. 我的neovim配置
  18. 手机SIM卡PIN码的重要性
  19. 监护仪原理介绍之ECG(心电)
  20. CDMA移动终端卡——UIM(转)

热门文章

  1. apache camel_您的Apache Camel应用程序现在包括现成的文档
  2. 注释嵌套注释_注释,无处不在的注释
  3. Java 11:新的HTTP客户端API
  4. Lambda表达式Java教程
  5. 建立无服务器的“ Hello World”功能
  6. 迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中
  7. SpringHibernate3
  8. 在JVM上对高并发HTTP服务器进行基准测试
  9. 使用JBoss Cool Store的终极云零售指南
  10. osgi导出包和非导出包_了解如何解决OSGI捆绑包