tomcat源码阅读-3.1

这篇文章是阅读了《How Tomcat Works》第五章后的总结。

 

本章主要讲了tomcat的container,而tomcat的container接口又有四个子接口:Engine,Host,Context,Wapper。

对应的标准实现类分别是ContainerBase,StandardEngine,StandardHost,StandardContext,StandardWapper。其中ContainerBase是其他四个的父类。

类图如下:

 

四个子接口分别对应:

1. Engine对应Catalina的 servlet引擎

2. Host代表拥有多个Context的虚拟主机

3. Context代表一个应用

4. Wapper代表一个具体的servlet

 

他们之间的关系是一个container可以有0或多个子container。

例如:

一个host可以有0或多个context,一个context可以有1或多个wapper。

 

而本章主要讲了Context和Wapper。

其实本章和上一张基本一样,唯一不一样的是Container,这里把上一章的SimpleContainer替换成了SimpleWapper,另外本章还介绍了Pipeline,这其实也是SimpleWapper和SimpleContainer最大的不同。

 

Pipeline

其实就是管道的意思,其实没啥神秘的,就是一个责任链模式的实现。主要包含了如下几个类:Pipeline,Valve,ValveContext和Contained。

其中Valve就是责任链中的一个个”节点“(相当于一个filter),最主要的方法就是invoke(),执行当前valve并且唤醒下一个valve执行。

而Pipeline则是一个链模型,保存了所有的Valve。

ValveContext的作用是当责任链运行的时候,保存责任链的上下文,以保证任何时候都能知道当前的Valve是哪个,下一个Valve是哪个以及是否还有下一个Valve。

 

这里需要注意的一点是,Pipeline的valve链中只保存了可插拔的一些valve,其实还有一个basic的valve并不在valve链中,无论valve链中有或者没有valve,最后basic的Vavle都会运行,而且在baseValve中就是执行指定servlet的service方法。

这里有个特别的地方,虽然valve链的顺序是按照第一个到最后一个这样的执行,但是其实可以像书中的例子那样在valve的invoke方法中首先调用ValveContext的invokeNext()方法控制先执行下一个valve,然后再执行当前valve中的code

 

  public void invoke(Request request, Response response, ValveContext valveContext)
    throws IOException, ServletException {

    // Pass this request on to the next valve in our pipeline
    valveContext.invokeNext(request, response);//这里先调用了invokeNext()方法
    System.out.println("Client IP Logger Valve");
    ServletRequest sreq = request.getRequest();
    System.out.println(sreq.getRemoteAddr());
    System.out.println("------------------------------------");
  }

 

 

 

 

 

 

还有一个就是 Contained了,这里主要是为了解耦Pipeline和Container之间的关系。为了使得Pipeline可以与上面提到的任何一种Conrainer组合,所以Valve都实现了Contained接口,该接口只有一对set和get方法用来设置和获取Container。

 

下一章将通过一段代码来解释一下一个Wapper和Context的运行。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Tomcat是一个开源的Java Servlet容器,作为Java服务器发展过程中最重要的组件之一。Tomcat的源代码,指的就是Tomcat的开源代码。 Tomcat 8.5版本的源码Tomcat项目最新的稳定版本,它包含了Tomcat运行所必需的所有代码和配置文件。这个版本的Tomcat有很多改进和优化,例如对HTTP/2的支持、WebSocket的增强、Servlet 3.1规范的实现等。 Tomcat 8.5的源码Java语言编写,使用了Java的一些高级特性和设计模式。这些源码主要包括核心组件的实现,例如Connector、Server、Service和Container等,还包括了一些相关的工具和附属组件的代码。 阅读Tomcat源码可以帮助我们更深入地理解Tomcat的运行机制和内部实现原理。通过阅读源码,我们可以学习到Tomcat是如何处理HTTP请求和响应的、如何管理Servlet的生命周期、如何处理Session和Cookie等。阅读源码还可以帮助我们更好地定位和解决Tomcat的问题,以及进行自定义的扩展和优化。 阅读Tomcat源码需要一定的Java编程基础和相关的Web开发知识。可以通过下载Tomcat源码,使用Eclipse等IDE工具进行调试和阅读,逐步理解其中的逻辑和细节。在阅读源码的过程中,可以查阅官方文档和源码注释,也可以参考一些相关的书籍和教程。此外,还可以参加Tomcat社区的讨论和交流,与其他开发者一起探讨和分享经验。 总之,阅读Tomcat 8.5的源码是一个学习和提升自己的好途径,通过深入理解Tomcat源码,我们可以更好地使用和开发Tomcat,提高Web应用的性能和稳定性。 ### 回答2: Tomcat 8.5是一个用Java编写的开源Web服务器和Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。要理解Tomcat 8.5的源代码,需要对Java编程和网络通信有一定的了解。 Tomcat 8.5的源代码是一个庞大而复杂的项目,由许多模块和包组成。它包括了处理HTTP请求的核心部分,处理Servlet和JSP的部分,以及其他一些与Web应用程序部署和管理相关的模块。 在Tomcat 8.5的源代码中,你会看到许多Java类和接口,这些类和接口定义了处理HTTP请求和响应的各种功能,包括建立网络连接、解析HTTP请求、执行Servlet和JSP、处理会话状态、处理静态资源等。这些类和接口之间通过继承和组合来建立关系,形成了一个完整的处理流程。 在Tomcat 8.5的源代码中,你还会看到许多配置文件和注释,这些文件和注释用来配置Tomcat服务器和Web应用程序的行为。配置文件包括服务器配置文件、虚拟主机配置文件、Web应用程序部署描述文件等。通过配置文件,你可以在不改变源代码的情况下改变服务器和应用程序的行为。 了解Tomcat 8.5的源代码对于开发和维护Web应用程序非常有帮助。通过阅读源代码,你可以深入了解Tomcat的工作原理,了解HTTP协议和Servlet容器的细节,以及优化和定制Tomcat服务器和Web应用程序的方法。 总之,Tomcat 8.5的源代码是一个复杂而庞大的项目,通过阅读源代码,你可以深入了解Tomcat的工作原理和行为,并为开发和维护Web应用程序提供帮助。但是要理解Tomcat的源代码,需要对Java编程和网络通信有一定的了解。 ### 回答3: Tomcat8.5源码是Apache Tomcat的一个版本,它是一个流行的开源Java Servlet容器,用于在Java环境中运行Web应用程序。 Tomcat8.5的源码是以Java编写的,它的主要目的是实现Java Servlet和JavaServer Pages(JSP)规范。源码的结构非常复杂,包含多个模块和组件,比如Catalina模块用于处理Servlet容器功能,Coyote模块用于处理HTTP请求和响应,Jasper模块用于JSP页面的编译和执行,以及其他许多模块和组件用于提供各种功能。 Tomcat8.5源码的核心功能包括请求处理、会话管理、线程池管理、虚拟主机支持、安全性、类加载和内存管理等。源码的设计考虑了高性能、可扩展性和可靠性的因素。 了解Tomcat8.5源码可以帮助我们深入理解Servlet容器的工作原理,以及如何优化和扩展Tomcat的功能。阅读源码可以学习到一些Java技术的实现细节,比如多线程编程、网络编程和类加载机制等。 同时,通过阅读和分析Tomcat8.5源码,我们还可以学到一些优秀的软件工程实践,比如面向对象设计、模块化设计和代码重用等。这对我们提升自己的编程能力和代码质量都是非常有帮助的。 总之,Tomcat8.5源码是一个非常有价值的学习资源,通过研究它,我们可以深入了解Java Servlet容器的实现原理,并可以通过阅读优秀的源码来提升自己的编程能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值