【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Tomcat 的工作原理:从启动 ...

铁佛  金牌会员 | 2025-3-15 22:24:32 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 982|帖子 982|积分 2946

 <前文回首>

点击此处查看           合集     
https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link


<本日更新>

一、Tomcat 的启动:从“开机”到“待机”

Tomcat[1] 的启动流程,说白了就是从“开机”到“待机”的过程。启动时,Tomcat 会加载设置、初始化组件、启动服务啥的,最后进入“待机”状态,等着处理哀求。

1. 加载设置:Tomcat 的“开机自检”

Tomcat 启动时,起首会加载设置文件,比如 server.xmlweb.xml 啥的。这些设置文件决定了 Tomcat 的行为,比如端口号、上下文路径、线程池大小啥的。
XML Code
<!-- server.xml 设置端口号 -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />


2. 初始化组件:Tomcat 的“组装零件”

Tomcat 加载完设置后,会初始化各种组件,比如 ConnectorEngineHostContext 啥的。这些组件是 Tomcat 的“零件”,它们各司其职,共同处理哀求。
Java Code
// Connector 初始化
Connector connector = new Connector("HTTP/1.1");
connector.setPort(8080);
connector.setProtocol("HTTP/1.1");


3. 启动服务:Tomcat 的“点火启动”

Tomcat 初始化完组件后,会启动各种服务,比如 ConnectorEngine 啥的。启动服务后,Tomcat 就进入“待机”状态,等着处理哀求。
Java Code
// 启动 Connector
connector.start();


二、Tomcat 的哀求处理:从“接单”到“交货”

Tomcat 的哀求处理流程,说白了就是从“接单”到“交货”的过程。哀求到达 Tomcat 后,Tomcat 会剖析哀求、匹配上下文、调用 Servlet 啥的,最后生成响应,返回给客户端。

1. 剖析哀求:Tomcat 的“接单”

哀求到达 Tomcat 后,Tomcat 会剖析哀求,提取哀求头、哀求体啥的。剖析哀求后,Tomcat 就知道该“干啥”了。
Java Code
// 剖析哀求
HttpServletRequest request = (HttpServletRequest) req;
String method = request.getMethod();
String uri = request.getRequestURI();


2. 匹配上下文:Tomcat 的“找地方”

Tomcat 剖析完哀求后,会根据哀求的 URL,匹配对应的上下文(Context)。上下文是 Tomcat 的“工作区”,里头装着 Servlet、Filter 啥的。
Java Code
// 匹配上下文
Context context = host.findChild(contextPath);


3. 调用 Servlet:Tomcat 的“干活”

Tomcat 匹配完上下文后,会调用对应的 Servlet,处理哀求。Servlet 是 Tomcat 的“工人”,它负责处理业务逻辑,生成响应。
Java Code
// 调用 Servlet
Servlet servlet = context.map(request);
servlet.service(request, response);


4. 生成响应:Tomcat 的“交货”

Servlet 处理完哀求后,会生成响应,返回给客户端。Tomcat 会把响应“包装”成 HTTP 响应,发送给客户端。
Java Code
// 生成响应
HttpServletResponse response = (HttpServletResponse) res;
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("Hello, World!");



三、Tomcat 的组件:从“零件”到“机器”

Tomcat 的组件是它的“零件”,它们各司其职,共同处理哀求。Tomcat 的重要组件包括 ConnectorEngineHostContext 啥的。

1. Connector:Tomcat 的“接线员”

Connector 是 Tomcat 的“接线员”,它负责吸收哀求、剖析哀求、发送响应啥的。Connector 的设置通常写在 server.xml 里。
XML Code
<!-- server.xml 设置 Connector -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />


2. Engine:Tomcat 的“总控台”

Engine 是 Tomcat 的“总控台”,它负责管理 HostContext 啥的。Engine 的设置通常写在 server.xml 里。
XMl Code
<!-- server.xml 设置 Engine -->
<Engine name="Catalina" defaultHost="localhost">
    <Host name="localhost" appBase="webapps" />
</Engine>


3. Host:Tomcat 的“车间”

Host 是 Tomcat 的“车间”,它负责管理 Context 啥的。Host 的设置通常写在 server.xml 里。
XML Code
<!-- server.xml 设置 Host -->
<Host name="localhost" appBase="webapps">
    <Context path="/myapp" docBase="myapp" />
</Host>



4. Context:Tomcat 的“工作台”

Context 是 Tomcat 的“工作台”,它负责管理 ServletFilter 啥的。Context 的设置通常写在 server.xml 大概 web.xml 里。
XML COde
<!-- server.xml 设置 Context -->
<Context path="/myapp" docBase="myapp" />


四、Tomcat 的参数:从“默认值”到“调校”

Tomcat 的参数是它的“调校”,开发者能通过设置参数,调整 Tomcat 的性能、行为啥的。Tomcat 的重要参数包括端口号、线程池大小、毗连超时啥的。

1. 端口号:Tomcat 的“门牌号”

端口号是 Tomcat 的“门牌号”,用户得通过端口号访问 Tomcat。Tomcat 的默认端口号是 8080,但生产环境通常得改成 80。
XML Code
<!-- server.xml 设置端口号 -->
<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
运行 HTML


2. 线程池:Tomcat 的“发动机”

线程池是 Tomcat 的“发动机”,Tomcat 用线程池处理哀求。线程池的大小得根据硬件资源、哀求量啥的“调校”。
XML Code
<!-- server.xml 设置线程池 -->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
          maxThreads="200" minSpareThreads="10" />


3. 毗连超时:Tomcat 的“耐心”

毗连超时是 Tomcat 的“耐心”,它决定了 Tomcat 等待客户端哀求的时间。毗连超时通常得根据网络状况、哀求量啥的“调校”。
XML Code
<!-- server.xml 设置毗连超时 -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />


五、Tomcat 的历史:从“小工具”到“大机器”

Tomcat 从 1999 年诞生到如今,已经走过了 20 多个年头。虽然如今 Tomcat 已经有点“过气”了,但它的“历史”还是挺“光辉”的。

1. Tomcat 3.x:初代“小工具”

Tomcat 3.x 在 1999 年发布,是 Tomcat 的“初代版本”。虽然功能简单,但已经能满足大部分开发需求了。

2. Tomcat 4.x:引入 Catalina

Tomcat 4.x 在 2001 年发布,引入了 Catalina,让 Tomcat 的架构更加“模块化”。Catalina 的引入,让 Tomcat 的“玩法”更加丰富。

3. Tomcat 5.x:支持 Servlet 2.4

Tomcat 5.x 在 2003 年发布,支持 Servlet 2.4,让 Tomcat 的功能更加强盛。Servlet 2.4 的引入,让 Tomcat 的“玩法”更加机动。

4. Tomcat 6.x:支持 Servlet 2.5

Tomcat 6.x 在 2006 年发布,支持 Servlet 2.5,让 Tomcat 的功能更加强盛。Servlet 2.5 的引入,让 Tomcat 的“玩法”更加机动。

5. Tomcat 7.x:支持 Servlet 3.0

Tomcat 7.x 在 2011 年发布,支持 Servlet 3.0,让 Tomcat 的功能更加强盛。Servlet 3.0 的引入,让 Tomcat 的“玩法”更加机动。

6. Tomcat 8.x:支持 Servlet 3.1

Tomcat 8.x 在 2014 年发布,支持 Servlet 3.1,让 Tomcat 的功能更加强盛。Servlet 3.1 的引入,让 Tomcat 的“玩法”更加机动。

7. Tomcat 9.x:支持 Servlet 4.0

Tomcat 9.x 在 2018 年发布,支持 Servlet 4.0,让 Tomcat 的功能更加强盛。Servlet 4.0 的引入,让 Tomcat 的“玩法”更加机动。



专有名词表明:


  • Tomcat:Apache Tomcat,一个开源的 JavaWeb 服务器,用于运行 Servlet 和 JSP。
  • Connector:Tomcat 的组件,负责吸收哀求、剖析哀求、发送响应等。
  • Engine:Tomcat 的组件,负责管理 Host、Context 等。
  • Host:Tomcat 的组件,负责管理 Context 等。
  • Context:Tomcat 的组件,负责管理 Servlet、Filter 等。
  • Servlet:Java 编写的服务器端程序,用于处理客户端哀求并生成动态 Web 内容。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表