深入剖析tomcat之servlet容器

       其实我们开发中经常用tomcat应用服务器,tomcat就一个servlet容器,能够运行基于serlvlet的应用程序并响应相应的http请求,开发时间长了,还是想想具体知道它是怎么运行的,尤其是servlet容器的机理,所以有幸拜读了外国人的《深入剖析tomcat》,感觉挺不错的,可以在此点击免费下载电子书,建议大家有时间读读,在读的过程中边读边翻阅着tomcat的源码,更有助于你理解它的各个机制,此处有tomcat 7的源码,点击可免费下载

 

       本人目前时间和组织语言能力及功力有限,心有余而力不足,网上看到有好心人(randyjiawenjie)做过记录,大概就是把书中重要的东西摘录的了一下,本人就就特意摘录以下了。再就是为了更有助理解,大家可以参考Tomcat 容器与servlet的交互原理,简单介绍了serlvet的原理和生命周期,还有学习tomcat源码(2) 实现servlet容器功能,这篇文章主要还是电子书的代码及解释,升华的文章Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

主要是《深入剖析tomcat》的第五章和第十一章。个人觉得如下3点是关键:

1. pipeline相关概念及其执行valve的顺序;

2. standardwrapper的接受http请求时候的调用序列;

3. standardwrapper基础阀加载servlet的过程(涉及到STM);

顺便问一句,应该每一个servlet程序员都知道filter。但是你知道Filter在tomcat的哪一个地方出现的吗?答案是standardwrapper基础阀会创建Filter链,并调用doFilter()方法

servlet容器的作用

管理servlet资源,并为web客户端填充response对象。

不同级别的容器

Engine:表示整个Catalina的servlet引擎、

Host:表示一个拥有数个上下文的虚拟主机

Context:表示一个Web应用,一个context包含一个或多个wrapper

Wrapper:表示一个独立的servlet

容器都实现了Container接口,继承了ContainerBase抽象类。

管道任务

3个概念:pipeline、valve、valveContext

pipeline包含servlet容器将要调用的任务集合,定义如下:

 

[java]  view plain copy
  1. public interface Pipeline {   
  2. public Valve getBasic();   
  3. public void setBasic(Valve valve);   
  4. public void addValve(Valve valve);   
  5. public Valve[] getValves();   
  6. public void invoke(Request request, Response response) throws IOException, ServletException;   
  7. public void removeValve(Valve valve);  
  8. }  


 

valve表示一个具体的执行任务,定义如下:

 

[java]  view plain copy
  1. public interface Valve {   
  2.     public String getInfo();   
  3.     public void invoke(Request request, Response response, ValveContext context) throws IOException, ServletException;  
  4. }  


 

valveContext按照字面意思就是阀门的上下文,用于遍历valve

 

[java]  view plain copy
  1. public interface ValveContex{   
  2.     public String getInfo();   
  3.     public void invokeNext(Request request, Response response) throws IOException, ServletException;  
  4. }  


 

valveContext的invokeNext()方法的实现:

 

[java]  view plain copy
  1. public final void invokeNext(Request request, Response response) throws IOException, ServletException {   
  2.     int subscript = stage; stage = stage + 1;  
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值