自己动手写一个tomcat之2拆分httpserver职责
写在前面源码 。本文目标使用标准的servlet以及拆分httpserver职责。1使用标准的servlet引入标准servlet的pomdependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion4.0.1/version/dependency让HttpServlet实现javax.servlet.Servlet接口使其成为标准的servletpublicclassHelloServletimplementsServlet{}同样的request和response成为规范内的请求和响应对象importjavax.servlet.ServletRequest;publicclassRequestimplementsServletRequest{}importjavax.servlet.ServletResponse;publicclassResponseimplementsServletResponse{}2拆分httpserver职责当前连接处理请求职责都在http server这显然不符合单一职责的原则来拆分下对于连接引入Connector组件对于处理请求引入processor组件。Connector组件定义类HttpConnectorpackagemonitomcat.server;// ...publicclassHttpConnectorimplementsRunnable{publicvoidrun(){ServerSocketserverSocketnull;intport8080;try{serverSocketnewServerSocket(port,1,InetAddress.getByName(127.0.0.1));}catch(IOExceptione){e.printStackTrace();System.exit(1);}while(true){Socketsocketnull;try{socketserverSocket.accept();HttpProcessorprocessornewHttpProcessor();processor.process(socket);// Close the socketsocket.close();}catch(Exceptione){e.printStackTrace();}}}publicvoidstart(){ThreadthreadnewThread(this);thread.start();}}processor组件定义类HttpProcessorpackagemonitomcat.server;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;publicclassHttpProcessor{publicHttpProcessor(){}publicvoidprocess(Socketsocket){InputStreaminputnull;OutputStreamoutputnull;try{inputsocket.getInputStream();outputsocket.getOutputStream();// create Request object and parseRequestrequestnewRequest(input);request.parse();// create Response objectResponseresponsenewResponse(output);response.setRequest(request);if(request.getUri().startsWith(/servlet/)){ServletProcessorprocessornewServletProcessor();processor.process(request,response);}else{StaticResourceProcessorprocessornewStaticResourceProcessor();processor.process(request,response);}}catch(Exceptione){e.printStackTrace();}}}此时整个处理请求过程如下这样我们的启动类就很简单了packagemonitomcat.server;// ...publicclassHttpServer{publicstaticfinalStringWEB_ROOTSystem.getProperty(user.dir)File.separatortargetFile.separatorclassesFile.separatorwebroot;publicstaticfinalStringWEB_ROOT_SERVLETSystem.getProperty(user.dir)File.separatortargetFile.separatorclassesFile.separatormonitomcatFile.separatorserver;publicstaticvoidmain(String[]args){// HttpServer server new HttpServer();// server.await();// 启动连接器HttpConnectorconnectornewHttpConnector();connector.start();}}相比原来的代码是不是倍感清新舒爽~~~~~~~~测试下C:\Users\dell9020curl http://localhost:8080/hello.txt say hello from minitomcat v2...! C:\Users\dell9020curl http://localhost:8080/servlet/monitomcat.server.HelloServlet !DOCTYPE html html headmeta charsetutf-8titleTest/title/head body bgcolor#f0f0f0 h1 aligncenterHello World from standard servlet!!!/h1写在后面参考文章列表手把手带你写一个 MiniTomcat 。

相关新闻

深入拆解Trae-Agent评估架构:从原理到实战构建AI智能体进化引擎

深入拆解Trae-Agent评估架构:从原理到实战构建AI智能体进化引擎

1. 项目概述:为什么我们需要深入拆解Trae-Agent的评估架构? 最近在跟进一些开源AI Agent框架时,Trae-Agent这个名字出现的频率越来越高。作为一个旨在构建“可训练、可评估、可演进”的智能体框架,它的设计理念本身就很有意思。但…

2026/8/13 9:49:46 阅读更多 →
SQL注入之堆叠查询注入学习笔记

SQL注入之堆叠查询注入学习笔记

一、什么是堆叠查询注入 堆叠查询注入是SQL注入中比较特殊的一种类型。它的核心逻辑是:在原有的SQL语句结束后,使用分号(;)作为分隔符,将多条SQL语句拼接在一起执行。 与之前学过的所有注入类型都不同,堆叠…

2026/8/13 9:49:46 阅读更多 →
Python爬虫实战:自动化采集App每日热门榜单数据

Python爬虫实战:自动化采集App每日热门榜单数据

1. 项目概述与核心需求解析最近在和一些做数据分析的朋友聊天时,他们提到一个挺有意思的需求:想了解某些特定类型应用(比如一些内容聚合类App)的每日热门内容趋势,用于做一些市场或用户行为分析。这类App通常每天会更新…

2026/8/13 9:49:46 阅读更多 →

最新新闻

AI Agent记忆系统构建指南:从向量检索到工程实践

AI Agent记忆系统构建指南:从向量检索到工程实践

1. 项目概述:为什么Agent需要记忆系统? 聊到AI Agent,大家最兴奋的往往是它能自主规划、调用工具、完成任务。但一个真正能用的Agent,尤其是能和你长期互动、处理复杂任务的Agent,其核心能力往往被忽视,那就…

2026/8/13 10:45:14 阅读更多 →
3步搞定多平台同步直播:obs-multi-rtmp终极配置指南

3步搞定多平台同步直播:obs-multi-rtmp终极配置指南

3步搞定多平台同步直播:obs-multi-rtmp终极配置指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 想要同时向YouTube、Bilibili、Twitch等多个平台直播,却苦于…

2026/8/13 10:45:14 阅读更多 →
拼多多新店完整运营攻略:零基础破零起量实操落地

拼多多新店完整运营攻略:零基础破零起量实操落地

很多拼多多新手商家开店后都会陷入一个死循环:开店上架产品后,零访客、零销量、无权重,盲目开直通车烧钱没转化、免费流量拿不到、新品长期沉寂,最后新店直接搁置荒废。其实拼多多新店运营核心逻辑很简单:先破零积权重…

2026/8/13 10:45:14 阅读更多 →
LoopLynx:基于数据流与FPGA的LLM推理架构革新

LoopLynx:基于数据流与FPGA的LLM推理架构革新

如果你正在为大型语言模型(LLM)推理的高延迟和惊人成本而头疼,尤其是在需要处理高并发请求的生产环境中,那么你很可能已经触及了当前LLM服务架构的“天花板”。传统的基于GPU的推理服务器,在面对突发流量或长序列生成时…

2026/8/13 10:45:14 阅读更多 →
CoreCycler完全指南:解锁AMD/Intel处理器单核稳定性测试的终极秘密

CoreCycler完全指南:解锁AMD/Intel处理器单核稳定性测试的终极秘密

CoreCycler完全指南:解锁AMD/Intel处理器单核稳定性测试的终极秘密 【免费下载链接】CoreCycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://…

2026/8/13 10:45:14 阅读更多 →
2026年AI代码生成工具Codex配置与API调用实战指南

2026年AI代码生成工具Codex配置与API调用实战指南

这次我们来看一个名为“Codex”的AI代码生成工具。根据网络信息,它是由OpenAI开发的大型语言模型,专门用于理解和生成代码。对于开发者来说,它意味着可以快速生成代码片段、补全函数、解释代码甚至在不同编程语言间进行转换。这篇文章的重点不…

2026/8/13 10:44:14 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →