最近在研究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的,有兴趣的大家一起研究 。
分享到:
相关推荐
asp.net weapi 框架揭秘,.net framework asp.net webapi
Inside C#--C#编程从入门到精通 pdg
Inside-Delphi-2006-by-Ivan-Hladni
引言RUST无疑是编程语言史中最难学的高级语言,在仅依靠静态编译的前提下实现一门安全的编程语言,这是必须付出的代价。无论如何,成为一门编程语言的老手的最佳办法就
Rising - Inside Your Calculator - From Simple Programs to Significant Insights Rising - Inside Your Calculator - From Simple Programs to Significant Insights Rising - Inside Your Calculator - From ...
inside-the-as400.tgz
Deep Inside CSharp---An Interview with Microsoft Chief Architect Anders Hejlsberg
「大数据」hum-t10-turning-your-security-strategy-inside-out-managing-insider-threat - 安全认证 数据库安全 安全研究 应急响应 零信任 安全资讯
这是Inside-The-Python-Virtual-Machine的中文翻译,此仓库仅为个人学习记录所用
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/...
Rust标准库内部原理(inside-rust-std-library)
* 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 linux graphics paper
3D-inside-3d-mesh.zip,一种简短、合理、简单、快速且稳健的函数,用于确定一组点是否位于三维网格内,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及...
Typora官方inside主题。解压复制到主题文件夹(themes)目录即可。可以未修改其中css文件微调样式。
Inside Windows Debugging - Practical Debugging and Tracing Strategies 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...
http://www.amazon.com/Inside-SQL-Server-Query-Optimizer/dp/1906434603/ref=sr_1_1?ie=UTF8&qid=1357223215&sr=8-1&keywords=inside+query+optimizer
模擬試題:Cisco.Test-inside.642-813.v2013-11-01.by.Jack.Cross.197q
西门子 plc Hans Berger Automating with 系列丛书 Automating with SIMATIC S7-400 inside TIA Portal-Publicis (2013).pdf