【转】Tomcat启动分析server.xml

本文深入解析Tomcat服务器架构,包括核心组件如Server、Service、Connector等的功能与交互过程,以及配置文件server.xml和web.xml的作用。

1 - Tomcat Server的组成部分
1.1 - Server

A Server element represents the entire Catalina servlet container. (Singleton)

1.2 - Service

A Service element represents the combination of one or more Connector components that share a single Engine
Service是这样一个集合:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求

1.3 - Connector

一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户
TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求
Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求
Coyote JK2 Connector 在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求

1.4 - Engine

The Engine element represents the entire request processing machinery associated with a particular Service
It receives and processes all requests from one or more Connectors
and returns the completed response to the Connector for ultimate transmission back to the client
Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名
当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理
Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理

1.5 - Host

代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配
每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path
当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理
匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context
所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配

1.6 - Context

一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成
Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类
当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类
如果找到,则执行该类,获得请求的回应,并返回

2 - Tomcat Server的结构图
3 - 配置文件$CATALINA_HOME/conf/server.xml的说明
该文件描述了如何启动Tomcat Server

<!-- - -->

<!-- 启动Server <br />&nbsp;&nbsp;&nbsp;&nbsp; 在端口8005处等待关闭命令 <br />&nbsp;&nbsp;&nbsp;&nbsp; 如果接受到"SHUTDOWN"字符串则关闭服务器 <br />&nbsp;&nbsp;&nbsp;&nbsp; -->

<!-- Listener ??? <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前没有看到这里 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->


<!-- Global JNDI resources ??? <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前没有看到这里,先略去 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->


... ... ... ...

<!-- Tomcat的Standalone Service <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service是一组Connector的集合 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它们共用一个Engine来处理所有Connector收到的请求 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->

<!-- Coyote HTTP/1.1 Connector <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port : 在端口号8080处侦听来自客户browser的HTTP1.1请求 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minProcessors : 该Connector先创建5个线程等待客户请求,每个请求由一个线程负责 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acceptCount : 当现有线程已经达到最大数75时,为客户请求排队 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当队列中请求数超过100时,后来的请求返回Connection refused错误 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectport : 当客户请求是https时,把该请求转发到端口8443去 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其它属性略 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->

port="8080"
minProcessors="5" maxProcessors="75" acceptCount="100"
enableLookups="true"
redirectPort="8443"
debug="0"
connectionTimeout="20000"
useURIValidationHack="false"
disableUploadTimeout="true" />

<!-- Engine用来处理Connector收到的Http请求 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认虚拟主机是localhost <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->

<!-- 日志类,目前没有看到,略去先 -->

<!-- Realm,目前没有看到,略去先 -->

<!-- 虚拟主机localhost <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appBase : 该虚拟主机的根目录是webapps/ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->

<!-- 日志类,目前没有看到,略去先 -->

<!-- Context,对应于一个Web App <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path : 该Context的路径名是"",故该Context是该Host的默认Context <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; docBase : 该Context的根目录是webapps/mycontext/ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->

<!-- 另外一个Context,路径名是/wsota -->



<!-- - -->

4 - Context的部署配置文件web.xml的说明
一个Context对应于一个Web App,每个Web App是由一个或者多个servlet组成的
当一个Web App被初始化的时候,它将用自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类
它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类
然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类
web.xml文件有两部分:servlet类定义和servlet映射定义
每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN对应
当该Context获得请求时,将查询mapping table,找到被请求的servlet,并执行以获得请求回应

分析一下所有的Context共享的web.xml文件,在其中定义的servlet被所有的Web App载入

<!-- - -->

<!-- 概述: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该文件是所有的WEB APP共用的部署配置文件, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每当一个WEB APP被DEPLOY,该文件都将先被处理,然后才是WEB APP自己的/WEB-INF/web.xml <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->

<!--&nbsp; + -+&nbsp; -->
<!--&nbsp; |&nbsp;&nbsp;&nbsp; servlet类定义部分&nbsp;&nbsp;&nbsp; |&nbsp; -->
<!--&nbsp; + -+&nbsp; -->

<!-- DefaultServlet <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当用户的HTTP请求无法匹配任何一个servlet的时候,该servlet被执行 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL PATTERN MAPPING : / <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->


default

org.apache.catalina.servlets.DefaultServlet


debug
0


listings
true

1

<!-- InvokerServlet <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理一个WEB APP中的匿名servlet <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当一个servlet被编写并编译放入/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该servlet被调用,把匿名servlet映射成/servlet/ClassName的形式 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL PATTERN MAPPING : /servlet/* <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->


invoker

org.apache.catalina.servlets.InvokerServlet


debug
0

2

<!-- JspServlet <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当请求的是一个JSP页面的时候(*.jsp)该servlet被调用 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL PATTERN MAPPING : *.jsp <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -->


jsp
org.apache.jasper.servlet.JspServlet

logVerbosityLevel
WARNING

3

<!--&nbsp; + -+&nbsp; -->
<!--&nbsp; |&nbsp;&nbsp;&nbsp; servlet映射定义部分&nbsp;&nbsp;&nbsp; |&nbsp; -->
<!--&nbsp; + -+&nbsp; -->


default
/


invoker
/servlet/*


jsp
*.jsp

<!--&nbsp; + +&nbsp; -->
<!--&nbsp; |&nbsp;&nbsp;&nbsp; 其它部分,略去先&nbsp;&nbsp;&nbsp; |&nbsp; -->
<!--&nbsp; + +&nbsp; -->

... ... ... ...

<!-- - -->

5 - Tomcat Server处理一个http请求的过程
假设来自客户的请求为:
http://localhost:8080/wsota/wsota_index.jsp

1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应

3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host

4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)

5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context

6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)

7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet

8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类

9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法

10)Context把执行完了之后的HttpServletResponse对象返回给Host

11)Host把HttpServletResponse对象返回给Engine

12)Engine把HttpServletResponse对象返回给Connector

13)Connector把HttpServletResponse对象返回给客户browser

本文出处:http://lib.360doc.com/05/1116/10/2689_31126.shtml

内容概要:本文介绍了一种基于蒙特卡洛模拟和拉格朗日优化方法的电动汽车充电站有序充电调度策略,重点针对分时电价机制下的分散式优化问题。通过Matlab代码实现,构建了考虑用户充电需求、电网负荷平衡及电价波动的数学模【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)型,采用拉格朗日乘子法处理约束条件,结合蒙特卡洛方法模拟大量电动汽车的随机充电行为,实现对充电功率和时间的优化分配,旨在降低用户充电成本、平抑电网峰谷差并提升充电站运营效率。该方法体现了智能优化算法在电力系统调度中的实际应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源汽车、智能电网相关领域的工程技术人员。; 使用场景及目标:①研究电动汽车有序充电调度策略的设计与仿真;②学习蒙特卡洛模拟与拉格朗日优化在能源系统中的联合应用;③掌握基于分时电价的需求响应优化建模方法;④为微电网、充电站运营管理提供技术支持和决策参考。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及优化求解过程,可尝试调整参数设置以观察不同场景下的调度效果,进一步拓展至多目标优化或多类型负荷协调调度的研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值