Tomcat启动分析以及如何启动.docx

上传人:b****8 文档编号:11351069 上传时间:2023-02-28 格式:DOCX 页数:12 大小:23.26KB
下载 相关 举报
Tomcat启动分析以及如何启动.docx_第1页
第1页 / 共12页
Tomcat启动分析以及如何启动.docx_第2页
第2页 / 共12页
Tomcat启动分析以及如何启动.docx_第3页
第3页 / 共12页
Tomcat启动分析以及如何启动.docx_第4页
第4页 / 共12页
Tomcat启动分析以及如何启动.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Tomcat启动分析以及如何启动.docx

《Tomcat启动分析以及如何启动.docx》由会员分享,可在线阅读,更多相关《Tomcat启动分析以及如何启动.docx(12页珍藏版)》请在冰豆网上搜索。

Tomcat启动分析以及如何启动.docx

Tomcat启动分析以及如何启动

1-TomcatServer的组成部分

1.1-Server

AServerelementrepresentstheentireCatalinaservletcontainer.(Singleton)

1.2-Service

AServiceelementrepresentsthecombinationofoneormoreConnectorcomponentsthatshareasingleEngine

Service是这样一个集合:

它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求

1.3-Connector

一个Connector将在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户

TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求

CoyoteHttp/1.1Connector在端口8080处侦听来自客户browser的http请求

CoyoteJK2Connector在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求

1.4-Engine

TheEngineelementrepresentstheentirerequestprocessingmachineryassociatedwithaparticularService

ItreceivesandprocessesallrequestsfromoneormoreConnectors

andreturnsthecompletedresponsetotheConnectorforultimatetransmissionbacktotheclient

Engine下可以配置多个虚拟主机VirtualHost,每个虚拟主机都有一个域名

当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理

Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理

1.5-Host

代表一个VirtualHost,虚拟主机,每个虚拟主机和某个网络域名DomainName相匹配

每个虚拟主机下都可以部署(deploy)一个或者多个WebApp,每个WebApp对应于一个Context,有一个Contextpath

当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理

匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context

所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配

1.6-Context

一个Context对应于一个WebApplication,一个WebApplication由一个或者多个Servlet组成

Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类

当Context获得请求时,将在自己的映射表(mappingtable)中寻找相匹配的Servlet类

如果找到,则执行该类,获得请求的回应,并返回

2-TomcatServer的结构图

3-配置文件$CATALINA_HOME/conf/server.xml的说明

该文件描述了如何启动TomcatServer

----------------------------------------------------------------------------------------------->

--启动Server

在端口8005处等待关闭命令

如果接受到"SHUTDOWN"字符串则关闭服务器

-->

--Listener?

?

?

目前没有看到这里

-->

--GlobalJNDIresources?

?

?

目前没有看到这里,先略去

-->

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

--Tomcat的StandaloneService

Service是一组Connector的集合

它们共用一个Engine来处理所有Connector收到的请求

-->

--CoyoteHTTP/1.1Connector

className:

该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector

port:

在端口号8080处侦听来自客户browser的HTTP1.1请求

minProcessors:

该Connector先创建5个线程等待客户请求,每个请求由一个线程负责

maxProcessors:

当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求

acceptCount:

当现有线程已经达到最大数75时,为客户请求排队

当队列中请求数超过100时,后来的请求返回Connectionrefused错误

redirectport:

当客户请求是https时,把该请求转发到端口8443去

其它属性略

-->

port="8080"

minProcessors="5"maxProcessors="75"acceptCount="100"

enableLookups="true"

redirectPort="8443"

debug="0"

connectionTimeout="20000"

useURIValidationHack="false"

disableUploadTimeout="true"/>

--Engine用来处理Connector收到的Http请求

它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理

默认虚拟主机是localhost

-->

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

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

--虚拟主机localhost

appBase:

该虚拟主机的根目录是webapps/

它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理

-->

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

--Context,对应于一个WebApp

path:

该Context的路径名是"",故该Context是该Host的默认Context

docBase:

该Context的根目录是webapps/mycontext/

-->

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

----------------------------------------------------------------------------------------------->

4-Context的部署配置文件web.xml的说明

一个Context对应于一个WebApp,每个WebApp是由一个或者多个servlet组成的

当一个WebApp被初始化的时候,它将用自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类

它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类

然后载入在自己的WebApp根目录下的WEB-INF/web.xml中部署的servlet类

web.xml文件有两部分:

servlet类定义和servlet映射定义

每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mappingtable)中,和某种URLPATTERN对应

当该Context获得请求时,将查询mappingtable,找到被请求的servlet,并执行以获得请求回应

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

----------------------------------------------------------------------------------------------->

--概述:

该文件是所有的WEBAPP共用的部署配置文件,

每当一个WEBAPP被DEPLOY,该文件都将先被处理,然后才是WEBAPP自己的/WEB-INF/web.xml

-->

--+-------------------------+-->

--|servlet类定义部分|-->

--+-------------------------+-->

--DefaultServlet

当用户的HTTP请求无法匹配任何一个servlet的时候,该servlet被执行

URLPATTERNMAPPING:

/

-->

default

org.apache.catalina.servlets.DefaultServlet

debug

0

listings

true

1

--InvokerServlet

处理一个WEBAPP中的匿名servlet

当一个servlet被编写并编译放入/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时候

该servlet被调用,把匿名servlet映射成/servlet/ClassName的形式

URLPATTERNMAPPING:

/servlet/*

-->

invoker

org.apache.catalina.servlets.InvokerServlet

debug

0

2

--JspServlet

当请求的是一个JSP页面的时候(*.jsp)该servlet被调用

它是一个JSP编译器,将请求的JSP页面编译成为servlet再执行

URLPATTERNMAPPING:

*.jsp

-->

jsp

org.apache.jasper.servlet.JspServlet

logVerbosityLevel

WARNING

3

--+---------------------------+-->

--|servlet映射定义部分|-->

--+---------------------------+-->

default

/

invoker

/servlet/*

jsp

*.jsp

--+------------------------+-->

--|其它部分,略去先|-->

--+------------------------+-->

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

----------------------------------------------------------------------------------------------->

5-TomcatServer处理一个http请求的过程

假设来自客户的请求为:

http:

//localhost:

8080/wsota/wsota_index.jsp

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

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

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

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

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

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

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

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

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

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

11)Host把HttpServletResponse对象返回给Engine

12)Engine把HttpServletResponse对象返回给Connector

13)Connector把HttpServletResponse对象返回

有很多办法可以让Tomcat在系统启动的时候自动运行,我这里介绍两种方法,一种简单,另外一种复杂而专业。

在介绍这两个方法前你应该先装JDK,Tomcat。

Tomcat的安装很简单,下载二进制压缩包xxx.tar.gz,用tarzxvfxxx.tar.gz-C[target],[target]是安装Tomcat的目录。

设置环境变量JDK_HOME和JAVA_HOME都指向JDK的安装目录即可。

    一.简单的方法

    Tomcat安装目录下的bin目录有两个脚本分别用来启动和停止Tomcat,分别是startup.sh,shutdown.sh,你可以用这两个脚本来手工启动和停止Tomcat服务并进行安装后的测试。

    我们最简单的方法就是通过startup.sh来自动启动Tomcat,编辑/etc/rc.d/rc.local增加内容(假设JDK目录是/usr/jdk,Tomcat目录是/apache/tomcat)

exportJDK_HOME=/usr/jdk

exportJAVA_HOME=/usr/jdk

/apache/tomcat/bin/startup.sh

    这样在系统重启后就可以自动启动Tomcat

    二.复杂而专业的方法

    前面介绍的应该是最简单的让Tomcat自动启动的方法了,但是它有两个不足

    1.无法指定启动Tomcat服务的用户,会导致Tomcat已超级用户运行,存在重大的安全隐患

    2.系统关闭的时候无法自动停止Tomcat服务

    在Linux下,Tomcat可以作为一个守护进程来启动以及停止,这个必须借助于项目commons-daemon中的jsvc工具。

Tomcat安装完后就带有这个工具的源码{tomcat}/bin/jsvc.tar.gz。

按照下列命令安装这个工具:

解压:

tarzxvfjsvc.tar.gz

配置:

cdjsvc-src

chmod+xconfigure

./configure--with-java=/usr/jdk

编译:

make

检验:

./jsvc-help

    jsvc工具本身带了一个脚本用来启动和停止Tomcat守护进程,但是在试验中发现该脚本无法设置为自动启动,显示的错误信息是:

tomcat服务不支持chkconfig,因此修改了此脚本,可以从此处下载:

tomcat.txt

    修改下载的脚本里面有关路径的信息以及要启动Tomcat的用户(用户必须已存在),拷贝脚本到/etc/rc.d/init.d目录下的tomcat文件,给该脚本赋予可执行权限(chmod+xtomcat),你可以使用命令/etc/rc.d/init.d/tomcatstart|stop来验证守护进程是否可以正常启动和停止。

    接下来就是把这个脚本设置成系统启动时自动执行,系统关闭时自动停止,使用如下命令:

    chkconfig--addtomcat

    重新启动系统后可以启动的过程中看到StartingTomcat.....[OK]的信息,这样就完成设置过程。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1