最近在研究tomcat容器,打算写一系列文章和大家一起分享。本文第一篇作为引子,不涉及任何tomcat的底层实现。
我们知道servlet规范:
规定servlet的生命周期:init->service->doXXX-->destory()。
还规定一个请求必须被封装成HttpServletRequest再由servlet的service方法来处理,并用HttpServletResponse来表示返回对象。
还规定Session必须被封装成HttpSession的形式。
Servlet规范还规定了Filter过滤器可以拦截请求做一些处理。
Servlet规范还规定了监听器Listener可以在context初始化、servlet初始化等一系列事件发生时触发一些事情。
Servlet规范使得我们的应用可以和底层的socket、字节流等完全隔离。
但是servlet规范只是个接口,真正使得我们实现了这些隔离的工作是由容器帮我们做的。
那么你所认为的容器应该是怎么样的?Servlet和Jsp容器应该做些什么?
1:实现Servlet api规范。这是最基础的一个实现,servlet api大部分都是接口规范。如request、response、session、cookie。为了我们应用端能正常使用,容器必须有一套完整实现。
2:启动Socket监听端口,等待http请求。
3:获取http请求,分发请求给不同的协议处理器,如http和https在处理上是不一样的。
4:封装请求,构造HttpServletRequest。把socket获取的用户请求字节流转换成java对象httprequest。构造httpResponse。
5:调用(若未创建,则先加载)servlet,调用init初始化,执行servlet.service()方法。
6:为httpResponse添加header等头部信息。
7:socket回写流,返回满足http协议格式的数据给浏览器。
8:实现JSP语法分析器,JSP标记解释器。JSPservlet实现和渲染引擎。
9:JNDI、JMX等服务实现。容器一般额外提供命名空间服务管理。
10:线程池管理,创建线程池,并为每个请求分配线程。
11:…..
还有没有其他的事情需要容器实现的?大家补充,哈哈。
那么tomcat是如何实现的呢?下面将会有一系列总结和大家一起探讨哈。
附上一个tomcat deverloper guide,基于tomcat6的,有兴趣的大家一起研究 。
分享到:
相关推荐
Rust标准库内部原理(inside-rust-std-library)
解压“typora-inside-theme-master.zip”后,你会得到一个名为“typora-inside-theme-master”的文件夹,这个文件夹包含了所有与该主题相关的资源。为了启用这个主题,你需要将其复制到Typora的主题文件夹。通常,...
在.NET Framework的基础上,Web API提供了一种优雅的方式来构建可互操作的Web服务,这些服务可以被各种客户端,如浏览器、移动设备或桌面应用所调用。 Web API的核心特性包括: 1. **路由系统**:Web API使用基于...
Inside-Delphi-2006-by-Ivan-Hladni
《Inside C#--C#编程从入门到精通》是一本深度解析C#编程语言的教程,旨在帮助初学者和有经验的程序员全面掌握C#的核心概念和技术。C#是由微软公司开发的一种面向对象的编程语言,广泛应用于Windows平台、游戏开发、...
引言RUST无疑是编程语言史中最难学的高级语言,在仅依靠静态编译的前提下实现一门安全的编程语言,这是必须付出的代价。无论如何,成为一门编程语言的老手的最佳办法就
Deep Inside CSharp---An Interview with Microsoft Chief Architect Anders Hejlsberg
「大数据」hum-t10-turning-your-security-strategy-inside-out-managing-insider-threat - 安全认证 数据库安全 安全研究 应急响应 零信任 安全资讯
Linux图形软件栈是一个复杂的系统,它由多个开源组件构成。如同任何开源项目一样,这些组件之间存在紧密的依赖关系,从而导致版本需求。例如,X.org服务器的变化可能需要Mesa 3D驱动程序的更改,这就在两个组件间...
k8s.gcr.io_-_阿里云_kubeadm-inside-the-great-wall
In order to grant security permissions to JARs located inside the web application repository, use URLs of of the following format in your policy file: file:${catalina.base}/webapps/examples/WEB-INF/...
综上所述,《Rising - Inside Your Calculator - From Simple Programs to Significant Insights》不仅是一本深入探讨计算器内部工作机制的书籍,还旨在通过简单的程序设计引导读者进入更高级的技术领域,最终获得...
* tomcat-jdbc.jar (Tomcat's database connection pooling solution) * tomcat-util.jar (Various utilities) * websocket-api.jar (WebSocket 1.1 API) You can make additional APIs available to all of your ...
《Inside SQL Query Tuning and Optimization》是针对Microsoft SQL Server 2005的一款深度解析查询优化的专业书籍。这本书旨在帮助数据库管理员和开发人员深入理解SQL Server的查询处理机制,掌握如何编写高效的SQL...
3D-inside-3d-mesh.zip,一种简短、合理、简单、快速且稳健的函数,用于确定一组点是否位于三维网格内,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及...
《Inside The C++ Object Model》是一本深入探讨C++对象模型的专业书籍,它为我们揭示了C++编程语言在底层是如何实现面向对象特性的。在这个压缩包文件中,包含的.chm文件是这本书的一个部分或者摘要,名为“Inside ...
Inside Windows Debugging - Practical Debugging and Tracing Strategies 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...
"inside-the-as400.tgz"这个压缩包可能包含了关于AS/400系统的详细资料,包括系统架构、操作系统特性、数据库管理、编程指南、案例研究等。通过学习这些资料,读者可以更深入地了解AS/400的工作原理和应用实践,提升...