相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是Tomcat的源码的确让人看起来头疼。笔者就在这里和大家共同分析一个简单的Web服务器是如何工作的源码下载地址。
Web服务器
Web服务器是一个复杂的系统,一个Web服务器要为一个Servlet的请求提供服务,需要做三件事:
1、创建一个request对象并填充那些有可能被所引用的Servlet使用的信息,如参数、头部、cookies、查询字符串等等。一个request对象是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一个实例
2、创建一个response对象,所引用的servlet使用它来给客户端发送响应。一个response对象是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一个实例。
3、调用servlet的service方法,并传入request和response对象。这里servlet会从request对象取值,给response写值。
在正式展示代码之前还需要了解一些必须额HTTP的知识(如果您对此非常熟悉您可以直接看下面分析代码)
HTTP
HTTP的定义不知道的童鞋可以自己去度娘,这里主要要说的就是HTTP协议的格式
HTTP请求包括三部分
1、方法、统一资源标识符(URI)、协议/版本
2、请求的头部
3、主题内容
下面是一个HTTP请求的例子
第一行表明这是POST请求方法,/examples/default.jsp是URI,HTTP/1.1是协议以及版本。其中URI指明了一个互联网资源,这里通常是相对服务器根目录解释的,也就是说这个HTTP请求就是告诉服务器我需要这个文件目录如下:根目录/ examples/default.jsp。
最后一行是HTTP的主题内容,Servlet会处理请求的主题内容,然后返回给客户端HTTP响应。
类似于HTTP请求,一个HTTP响应也包括上面三个部分。
1、方法、统一资源标识符(URI)、协议/版本
2、响应的头部
3、主题内容
下面是一个HTTP响应的例子
第一行告诉协议版本,以及请求成功(200表示成功)
响应头部和请求头部一样,一些有用的信息。响应的主体就是响应本身HTML内容。
好了基本知识介绍完毕,下面开始解释代码
部分相关代码
HttpServer类代表一个web服务器。首先提供一个WEB_ROOT所在的目录和它下面所有的子目录下静态资源。其次定义了一个中止服务的命令,也就是说当得到的请求后面跟/shutdown的时候停止服务,默认是把服务设置为开启。下面就是进入main函数了,首先实例化一个HttpServer类,然后就是通过await方法等待客户端发来的请求。如果客户端输入的URL不是http://localhost:8080/SHUTDOWN则表示不停止服务器,然后就是继续执行await方法中的内容,在await方法中最重要的就是定义两个对象,一个是request一个是response,下面就来说说Request和Response类。
首先调用InputStream对象中的read方法获取HTTP请求的原始数据,然后在parseUri方法中获得uri也就是要请求的静态资源。说白了Request类的主要作用就是告诉服务器用户要的是什么也就是在http://localhost:8080后面出现的东西。
Response类代表一个HTTP响应。首先Response接收一个OutputStream对象,然后通过sendStaticResource方法对接收的Request进行处理,整个处理过程就是根据请求在服务器端进行寻找对应静态资源的过程。找到所需要的资源后发送给客户端然后让客户端显示出来。
运行程序
运行上面的HttpServer类,然后在浏览器的地址栏中键入下面的地址:http:localhost:8080/index.jsp,然后你会在浏览器中看到index.jsp页面。
![](http://t1.qpic.cn/mblogpic/4602b6705e8ed1c8ebe4/460)
在控制台可以看到类似于下面的HTTP请求
小结
上面自己动手写的这个所谓的服务器仅仅有三个类组成,从功能上来说他只能显示一些静态的资源,并不是全部功能。一个优秀的服务器还有很多细节要做,但是出于学习的目的大家现在有这些了解就足够了,后面还会有对服务器的详细介绍,敬请期待。
参考资料《How Tomcat Works》
分享到:
相关推荐
源码的下载对于开发者来说极其重要,因为它提供了深入理解Tomcat工作原理的机会,有助于优化性能、调试问题或定制特定功能。 在"apache-tomcat-7.0.81-src"这个压缩包中,你将获得Tomcat 7.0.81版本的完整源代码,...
Apache Tomcat是一款开源的Java Servlet容器,主要用于实现JavaServer Pages (JSP)、Servlet和Java EE的Web...通过学习其源代码,开发者可以深入理解Web服务器的工作原理,并能更好地优化和调试自己的Java Web应用。
通过对`apache-tomcat-9.0.8-src`源码的深入研究,我们可以了解到Tomcat如何处理网络请求,怎样管理Web应用,以及如何实现各种高级特性。这对于开发者来说是一份宝贵的学习资料,可以帮助他们更好地优化应用程序,...
《深入理解Tomcat连接器:剖析tomcat-connectors-1.2.48-src源码》 Tomcat作为一款广泛使用的开源Java应用服务器,其在处理Web应用方面扮演着核心角色。而Tomcat的连接器(Connector)是其与外部世界交互的关键组件...
学习Tomcat源码时,可以先从整体架构出发,了解各个组件的作用和交互方式,然后再深入到具体类的实现。通过阅读源码,我们可以理解Tomcat如何处理请求,如何管理Web应用,以及如何实现JSP的生命周期。此外,还可以...
Apache Tomcat是一款开源的Java Servlet容器,主要用于部署和运行Java Web应用程序。源码版本7.0.59和7.0.69是Tomcat在7.0...通过学习和分析源码,开发者可以提高自己的技能,更好地理解和解决问题,提升项目开发效率。
另外,`apache-tomcat-8.5.78-src.zip` 是与Linux版本对应的Windows源码压缩包,适合在Windows环境下进行源码级别的学习和开发。 在运维方面,了解Tomcat的配置文件如`server.xml`、`web.xml`以及`context.xml`是...
深入学习jakarta-tomcat-connectors-1.2.15-src源码,可以提升对Tomcat工作流程的理解,包括请求的接收、处理、响应过程,以及如何通过连接器优化服务器性能。这对于进行性能调优、定制化开发或者排查系统问题都至关...
Apache Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用程序,包括JSP和Servlet。它是由Apache软件基金会开发和维护...通过深入学习和实践,你可以充分利用Tomcat的特性来构建高效、稳定的Web服务环境。
同时,`conf/server.xml`是配置整个Tomcat服务器的核心文件,理解其结构和配置项也是很重要的。 总的来说,研究Apache Tomcat 9.0.14的源码不仅可以提高对Java Web技术的理解,也有助于提升开发和运维技能,为构建...
通过深入学习Apache Tomcat 8.5.68的源代码,开发者不仅可以理解Web服务器的工作原理,还可以掌握如何定制Tomcat以满足特定需求,进一步提升应用程序的性能和稳定性。同时,这也是Java Web开发人员进阶的重要一步。
- `apache-tomcat-7.0.39-src`提供的源代码可以帮助开发者深入理解Tomcat的工作原理,进行自定义修改或扩展,例如添加新的特性或优化性能。 通过学习和理解这些知识点,开发者可以有效地利用Apache Tomcat 7.0.39...
Apache Tomcat 7.0.29源码...通过深入学习和分析Tomcat 7.0.29源码,开发者可以理解其内部工作原理,优化性能,解决故障,甚至贡献自己的代码。这有助于提升Java Web开发的专业技能,并对服务器端架构有更深刻的认识。
总之,Apache Tomcat 6.0.53源码包对于Java Web开发者来说是一份宝贵的教育资源,可以帮助他们深入学习Servlet、JSP和服务器端的架构设计。同时,与MyEclipse的结合使得学习和开发过程更加高效。
Apache Tomcat是一款开源的Java Servlet容器,主要用于部署和运行Java Web应用程序。...同时,这也是深入学习Java Web技术的重要途径,有助于提升开发者在Web应用开发和服务器管理方面的专业技能。
Apache Tomcat 7.0.40 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的Web应用程序容器。...对于Java Web开发人员来说,深入学习和理解Tomcat源码是提升技能的重要步骤。
"tomcat-7.0.42-src源码爱好者(已编译导入直接可用)" 这个标题明确指出我们讨论的是Apache Tomcat服务器的7.0.42版本的源代码,适合对Tomcat内部运作机制感兴趣的开发者。"已编译导入直接可用"意味着这个源码包...
通过阅读源代码,我们可以学习Tomcat如何处理网络连接,如何解析HTTP请求,如何管理Servlet生命周期,以及如何部署和卸载Web应用。这对于理解Web服务器的工作原理,提升Java Web开发技能非常有帮助。同时,如果你...
在本文中,我们将深入探讨Tomcat 8.5.63的源码包,以及如何在Linux系统中处理`.tar.gz`格式的压缩文件。 标题中的"apache-tomcat-8.5.63-src.tar.gz"表明我们下载的是Apache Tomcat 8.5.63版本的源代码,以`.tar.gz...
对于学习Java Web开发和服务器端技术的人来说,分析和研究Tomcat源码是一个很好的学习途径,可以帮助理解Web服务器的内部运作机制,提升开发技能。同时,对于运维人员来说,了解源码也有助于更好地排查和解决运行时...