Tomcat几个对象

先贴出一个对象间的结构图

<Server>
    <Listener></Listener>
    <Listener></Listener>
    ......(多个Listener)
    <GlobalNamingResources>
        <Resource></Resource>
    </GlobalNamingResources>
    <Service>
        <Connector protocol="HTTP/1.1"></Connector>
        <Connector protocol="AJP/1.3"></Connector>
        ......(一般2个Connector)
        <Engine>
            <Realm></Realm>
            <Host>
                <Valve></Valve>
                ......(可以有多个)
            </Host>
        </Engine>
    </Service>
</Server>

一个server(服务器)包含一至多个service(服务),一个service包含惟一一个Engine(处理机)或者一至多个connector(连接器),一个Engine包含多个host(虚拟主机),一个host包含一至多个content(web应用)

下面对各个节点分析:

1 Server:整个Catalina容器的入口点,通过Serverfactory生成Server实例类

<Server port="8005" shutdown="SHUTDOWN">
2 Service:N个 Connector+1个Engine,处理所有Connector所获得的请求

<Service name="Catalina">

3 Connector:把从Socket传递过来的数据封装成Request,传递给容器,有2种包括httpConnector和ajpConnector,

httpConnector侦听来自浏览器的http请求,如8080:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
aj pConnector侦听来自其它WebServer的请求,如8009:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

属性解释:
className:Connector的实现类
port:侦听的端口
minProcessors:最小线程数,初始化几个线程等待请求(5)
maxProcessors:最大线程数,线程请求超过最大线程数则不会立即创建线程,而是加入排队中(75)
acceptCount:排队数,如果排队过多了,那么就不响应请求了,返回Connection refused错误(100)
redirectport:如果请求是https时,把该请求转发到端口8443去
Tomcat有3个容器,Engine,Host和Context
4 Engine: Engine收到Connector传递来的请求后,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理,如果没有匹配到,则用默认的Host,此处是localhost,Engine常用类型有2种,Catalina和Standalone

<Engine defaultHost="localhost" name="Catalina">
5 Host:虚拟主机,每个虚拟主机有一个域名如localhost,一个 虚拟主机下可以部署一个或者多个Web App,也就是多个Context,当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
6 Context: 一个Context对应一个web app,一个app由N个Servlet组成,Context根据web.xml载入Servlet类

<servlet>
	<description></description>
	<display-name>FileDownloadServlet</display-name>
	<servlet-name>FileDownloadServlet</servlet-name>
	<servlet-class>com.itiptop.portal.servlet.FileDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>FileDownloadServlet</servlet-name>
	<url-pattern>/FileDownloadServlet</url-pattern>
</servlet-mapping>




(此处图片借鉴了某位仁兄的,我加了点东西,画图什么的还是不会的难过


现在假设客户端有个请求:http://localhost:8080(Host)/webbei(Context)/index.jsp(Servlet)

1)请求被发送到本机端口8080,被在那里侦听的HTTP Connector获得
2)Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3)Engine获得请求localhost:8080/webbei/index.jsp,匹配名为localhost的虚拟主机(Host)
4)localhost Host获得请求/webbei/index.jsp,匹配名为/webbei的Context(web app)
5)path="/webbei"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
6)Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
7)构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
8)Context把执行完了之后的HttpServletResponse对象返回给Host
9)Host把HttpServletResponse对象返回给Engine
10)Engine把HttpServletResponse对象返回给Connector
11)Connector把HttpServletResponse对象返回给客户端browser

---------------------------------------------------------------------------------------------------------------
现在发送在CSDN上的文章都能在手机端查看啦,走路上班、闲暇之余可以看看手机,共勉共进!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值