Tomcat脚本及HTTP请求过程跟踪

来源:互联网 发布:linux mysql设定字符集 编辑:程序博客网 时间:2024/04/28 02:06

server.xml

<server  port="8005" shutdown="SHUTDOWN"> 监听Tomcat关闭的动作

       <listener className="org.apache.catalina.core.AprLifeCycleListener"/>

       <service name="catalina">

                <connector port="80" maxhttpHeaderSize="8192" maxThreads(最大的线程数)="150" minSpareThreads(初始化创建的最小线程数)="25"          

maxSpareThreads(超过此值,tomcat开始关闭不需要的连接)="75" enableLookups(反查域名,为了效率应设置为false)="false" redirectPort(当80不可用时,换为8443)="8443" acceptCount(超过最大连接数时,可以放在等待队列中的连接数)="100"  connectionTimeout="20000"  disableUploadTime="true"/>  connector表示client与server的连接

               <connector port="8009" enableLookUp="false" redirectPort="8999"  protocol="AJP/1.3"/>该Connector用于集群

                <engine name="catalina" defaultHost="localHost">

                              <realm className="org.apache.catalina.realm.userDataBaseRealm"/>用于存放用户名和密码及Role的数据库

                              <host name="localhost" appBase(应用程序基本目录)="webapps" unpackWars(true表示war包自动解压)="true" autoDeploy="true" xmlValidation="false" xmlNameSpaceAware="false"/> host表示一个虚拟主机             

                </engine> severice中的请求处理机,接收和处理来自connector的请求

       <service>

</server>

<context docBase="D:/tomcat/webapps/tst">

             <WatchedResource>WEB-INF/web.xml</WatchedResource>这里将该context对应的web.xml对应

             <manager className="org.apache.catalina.session.standardManager" MaxActiveSession="-1" MaxInactiveInternal="60" pathname="/"/>

</context> context可以放到server.xml可以单独成文放到context.xml中,context可以用来设置session的数据及过期时间等

 

A service element represents the combination of one or more connector components that share a single engine service.

Engine: it receives and processs all requests from one or more connectors and returns the completed response to the connector for ultimate transmission back to the client.

每个Context Element对应一个Web App,每个Web App由一个或多个servlet组成 servlet的定义来自于web.xml

web.xml

<servlet> servlet定义,包括名字和class

           <servlet-name>jsp</servle-name>

           <servlet-class>org.apache.jsper.serlvet.Jspservlet</servlet-class>

</servlet>

<service-mapping> servlet 映射

            <servlet-name>jsp</servlet-name>

             <url-pattern>*.jsp</url-pattern>

</service-mapping>

         

Tomcat Server处理一个HTTP请求的过程:http://localhost:80//usota/index.jsp

(1)请求被发送到本机端口80,被在那里进行监听的loyote http/1.1 connector获得

(2)connector将请求交给Engine,并等待Engine的返回

(3)Engine获得localhost:80//usota/index.jsp请求,匹配它所拥有的host

(4)Engine匹配到名为localHost的Host,即使不匹配将该请求给它,因为只有一个Host

(5)Host匹配到路径为/usota的Context,若匹配不到则到路径为“”的context中处理

(6)path=“/usota”的context获得请求index.jsp,在它的servlet mapping table中找到它对应的servlet

(7)context匹配到URL pattern为*.jsp的对应 jspServlet类

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

(9)context把执行完成的httpServletResponse对象返回到Host

(10)Host把该response对象返回给Engine

(11)Engine继续将该response对象返回给Connector,继而返回到Browser中