`

Tomcat源码学习:一个最简单的“Tomcat”

阅读更多

        花了不少时间看了Tomcat7的源码,相结合《HowTomcatWorks》这本书学到的内容,感觉认识了不少知识。写些文章总结一下,以免过后忘记了。

 

        Tomcat的两个重要组件:容器(Container)连接器(Connector),是我这次学习源码过程中,主要研究的内容。Tomcat是一个复杂的Servlet容器,但是,简单来说它有3个基本任务,对于每个从客户端发来的请求,Tomcat都会为其完成以下3个操作:

        1、根据从socket传入的信息(解析socket的InputStream),创建一个request对象,用可能会在Servlet中使用到的信息来填充该request对象,如参数、头、cookies、查询字符串、URI等。request对象是javax.servlet.ServletRequest接口或javax.servlert.http.ServletRequest接口的实例。

        2、创建一个Response对象,用来向Web客户端发送响应,返回信息。response对象是javax.servlet.ServletResponse接口或javax.servlert.http.ServletResponse接口的实例。

        3、调用Servlet的service(request,response)方法,Servlet将从request中读取需要的信息,并通过response对象发送响应信息。

 

        简单地说,Tomcat的连接器和容器,就是完成上面三个步骤的组件。连接器负责接收Web客户端发来的请求,然后处理请求,生成request和response对象,并把这两个对象传给容器。容器负责加载Tomcat中的web程序、加载web程序中的Servlet、jsp等。当连接器调用容器来执行Servlet时,容器找出需要调用的Servlet并执行Servlet的service(request,response)方法。

 

        Tomcat的容器和连接器其实挺复杂、强大,但是就不在本文中详细解析了。本文只是举个简单栗子说明一下Tomcat是如何接收客户端信息并调动Servlet的。

        下面是我结合《HowTomcatWorks》这本书中的代码,写的一个简单的“Tomcat”程序,它可以向Web浏览器返回程序webapps文件夹下的静态文件和执行Servlet。程序项目的结构如图:


com.st.connector包是Connector的实现;com.st.container包是Container的实现;startup包是启动程序用的。

webapps文件夹下是一个模拟的web程序,包含一个Servlet类和3个静态文件。当程序启动时,Container会加载webapps文件夹下的Servlet。 当运行程序时,在浏览器中输入http://localhost:8080/HelloServlet,则会调用HelloServlet。当输入http://localhost:8080/时,默认显示index.html。http://localhost:8080/brazil.jpg,浏览器展示五星巴西。当输入的路径不存在时,提示404 。

项目源码可以在附件中下载:SimpleTomcat.rar

 

源码挺简单,就不详细说明了。

 

  • 大小: 72.7 KB
分享到:
评论

相关推荐

    tomcat源码工具包

    "Tomcat源码工具包"是一个对开发者极具价值的学习资源,提供了深入理解Tomcat运行机制的机会。通过深入研究源码,开发者不仅可以提升技能,还能解决实际问题,进一步推动个人和团队的项目发展。

    http协议详解和tomcat源码,how tomcat works

    状态码是一个三位数字,如200表示成功,404表示未找到,500表示服务器内部错误。头部同样包含各种元信息,实体主体则包含服务器返回的具体内容。 **Tomcat工作原理** Tomcat是一款开源的Java Servlet容器,它实现...

    ssm+maven+tomcat简单项目源码

    总之,这个"ssm+maven+tomcat简单项目源码"是一个很好的学习平台,涵盖了Java Web开发的关键技术。通过深入研究和实践,可以提升对SSM框架和Maven项目管理的理解,同时也能掌握如何在Tomcat上部署和运行Web应用。

    深入剖析Tomcat 中文版 带简单书签

    在分析Tomcat源码时,我们会发现它遵循MVC模式,即Model-View-Controller模式。Servlet充当控制器的角色,负责处理请求并生成响应;JSP文件可以看作是视图层,负责展示最终用户界面;而处理业务逻辑的部分则可能是...

    Tomcat9.0_SourceCode_WithIdea:出于兴趣学习Tomcat源代码-tomcat source code

    Tomcat9.0_SourceCode_WithIdea ...注意:如果您本机上已经安装了Tomcat,并且是自启动的,保证您本机的Tomcat和当前阅读的内核所占的端口不是同一个。如果您不会设置,最好将现在的Tomcat进展杀死

    linux 下的 jdk 1.8 和 tomcat ,简单好用无套路

    本教程将详细介绍如何在Linux环境下安装与配置Java JDK 1.8和Apache Tomcat,为初学者提供一个简单易懂的操作流程。 首先,我们要处理的是`jdk-8u161-linux-x64.tar.gz`文件,这是Oracle JDK 1.8的一个版本,适用于...

    Tomcat简单版.rar

    描述中的“简单的Tomcat实现,纯手写,最对独家”暗示了这是一个由个人或团队独立编写的、简化版的Tomcat服务器,可能去除了某些复杂的功能,以帮助初学者更好地理解和学习Tomcat的工作原理。"纯手写"可能意味着没有...

    《Tomcat与Java Web开发技术详解(第2版)》_(孙卫琴)_源码.zip

    Tomcat是Apache软件基金会的Jakarta项目下的一个开源项目,是一款轻量级的应用服务器,特别适合于小型到中型的Java Web应用。它实现了Java Servlet和JavaServer Pages(JSP)规范,同时也支持Java EE的其他部分,如...

    tomcat-4.1.40-src

    首先,Tomcat 4.1.40是Tomcat历史上的一个早期版本,发布于2004年,尽管现在最新的版本已经发展到了9.x甚至10.x,但这个老版本仍然有其独特的学习价值。它见证了Tomcat从简单到复杂的演进过程,其中包含了对基础架构...

    tomcat开发技术

    - **Engine**:代表一个虚拟的Tomcat实例。 - **Host**:对应于虚拟主机,可以在一台物理机器上部署多个虚拟主机。 - **Context**:对应于一个Web应用,每个Web应用都有一个唯一的上下文路径。 - **Wrapper**:...

    ubuntu+java+tomcat+mysql实现简单的登录注册页面

    在IT行业中,构建一个简单的登录注册页面是许多初学者和开发者必须掌握的基础技能。本教程将探讨如何在Ubuntu操作系统上,结合Java编程语言、Tomcat服务器以及MySQL数据库来实现这一功能。通过这个过程,我们可以...

    Tomcat 开发Comet实例

    接下来,我们将创建一个简单的WeatherServer项目,这是一个展示Comet技术如何工作的实例。项目中可能包括以下几个关键组件: 1. **Servlet**:这是服务器端的核心,负责处理客户端请求并进行Comet操作。你需要实现`...

    tomcat 分配请求之——socket获取请求

    在Tomcat服务器启动后,它会在配置的端口(默认为8080)上创建一个ServerSocket监听。当客户端发起连接请求时,ServerSocket会生成一个新的Socket实例与客户端建立连接。这个Socket对象是数据传输的通道,它将承载...

    jsp+tomcat+sql人事管理系统(源码+视频+数据库).rar

    本系统采用Java技术栈,具体为JSP(JavaServer Pages)作为前端展示层,Tomcat作为服务器运行环境,SQL(Structured Query Language)作为后台数据存储和处理的核心,构建了一个全面的人事管理解决方案。 首先,JSP...

    jsf最简单例子(源代码),初学者适合。

    "jsf最简单例子(源代码)" 暗示这是一个面向初学者的基础JSF应用示例,提供了源代码供学习者参考。这个例子通常会展示JSF的基本架构和关键概念,帮助新手快速入门。 **描述解析:** "直接在tomcat中发布使用" 提示...

    tomcat以及Java开发软件

    标题中的“tomcat”指的是Apache Tomcat,一个广泛使用的开源应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)技术。Tomcat是Java EE(现在称为Jakarta EE)的一部分,它提供了轻量级的Web...

    SpringBoot 最简单的MVC项目源码

    这个"SpringBoot最简单的MVC项目源码"是一个很好的起点,帮助开发者理解如何在Spring Boot中集成Model-View-Controller(MVC)架构。下面将详细解释相关知识点。 1. **Spring Boot基础**: Spring Boot由Pivotal...

    JavaWeb+tomcat+mysql+jsp实现论坛系统【完整源码+数据库+项目运行视频】

    javaWeb+tomcat+mysql+jsp实现论坛系统【完整源码+数据库+项目运行视频】 一、项目简介 本项目是一套基于spring+jsp+mysql实现的Java web论坛系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的...

Global site tag (gtag.js) - Google Analytics