Tomcat做为Web服务器深受市场欢迎,有必要对其进行深刻的研究。在工做中,咱们常常会把写好的代码打包放在Tomcat里并启动,而后在浏览器里就能愉快的调用咱们写的代码来实现相应的功能了,那么Tomcat是如何工做的?web
咱们启动Tomcat时双击的startup.bat文件的主要做用是找到catalina.bat,而且把参数传递给它,而catalina.bat中有这样一段话:浏览器
Bootstrap.class是整个Tomcat 的入口,咱们在Tomcat源码里找到这个类,其中就有咱们常用的main方法:服务器
这个类有两个做用 :1.初始化一个守护进程变量、加载类和相应参数。2.解析命令,并执行。多线程
源码不过多赘述,咱们在这里只须要把握总体架构,有兴趣的同窗能够本身研究下源码。Tomcat的server.xml配置文件中能够对应构架图中位置,多层的表示能够配置多个:架构
即一个由 Server->Service->Engine->Host->Context 组成的结构,从里层向外层分别是:app
• Server:服务器Tomcat的顶级元素,它包含了全部东西。优化
• Service:一组 Engine(引擎) 的集合,包括线程池 Executor 和链接器 Connector 的定义。网站
• Engine(引擎):一个 Engine表明一个完整的 Servlet 引擎,它接收来自Connector的请求,并决定传给哪一个Host来处理。spa
• Container(容器):Host、Context、Engine和Wraper都继承自Container接口,它们都是容器。线程
• Connector(链接器):将Service和Container链接起来,注册到一个Service,把来自客户端的请求转发到Container。
• Host:即虚拟主机,所谓的”一个虚拟主机”可简单理解为”一个网站”。
• Context(上下文 ): 即 Web 应用程序,一个 Context 即对于一个 Web 应用程序。Context容器直接管理Servlet的运行,Servlet会被其给包装成一个StandardWrapper类去运行。Wrapper负责管理一个Servlet的装载、初始化、执行以及资源回收,它是最底层容器。
好比如今有如下网址,根据“/”切割的连接就会定位到具体的处理逻辑上,且每一个容器都有过滤功能。
本文实现效果比较简单,仅供新手参考,大神勿喷。当浏览器访问对应地址时:
实现以上效果总体思路以下:
1.ServerSocket占用8080端口,用while(true)循环等待用户发请求。
2.拿到浏览器的请求,解析并返回URL地址,用I/O输入流读取本地磁盘上相应文件。
3.读取文件,不存在构建响应报文头、HTML正文内容,存在则写到浏览器端。
工程文件结构和pom.xml文件:
1.HttpServer核心处理类,用于接受用户请求,传递HTTP请求头信息,关闭容器:
2.建立Request类,获取HTTP的请求头全部信息并截取URL地址返回:
3.建立Response类,响应请求读取文件并写回到浏览器
1.在WEB_INF文件夹下读取web.xml解析,经过请求名找到对应的类名,经过类名建立对象,用反射来初始化配置信息,如welcome页面,Servlet、servlet-mapping,filter,listener,启动加载级别等。
2.抽象Servlet类来转码处理请求和响应的业务。发过来的请求会有不少,也就意味着咱们应该会有不少的Servlet,例如:RegisterServlet、LoginServlet等等还有不少其余的访问。能够用到相似于工厂模式的方法处理,随时产生不少的Servlet,来知足不一样的功能性的请求。
3.使用多线程技术。本文的代码是死循环,且只能有一个连接,而现实中的状况是每每会有不少不少的客户端发请求,能够把每一个浏览器的通讯封装到一个线程当中。
还能作什么扩展,实现什么功能,读者能够在评论中与我探讨。
本文做者:我叫刘半仙
本文为云栖社区原创内容,未经容许不得转载。