一、Tomcat的体系结构
Tomcat服务器的启动是基于一个server.xml文件的,Tomcat启动的时候首先会启动一个Server,Server里面就会启动Service,Service里面就会启动多个"Connector(连接器)",每一个连接器都在等待客户机的连接,当有用户使用浏览器去访问服务器上面的web资源时,首先是连接到Connector(连接器),Connector(连接器)是不处理用户的请求的,而是将用户的请求交给一个Engine(引擎)去处理,Engine(引擎)接收到请求后就会解析用户想要访问的Host,然后将请求交给相应的Host,Host收到请求后就会解析出用户想要访问这个Host下面的哪一个Web应用,一个web应用对应一个Context。
完整的server.xml配置文件内容:
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/.keystore" keystorePass="123456"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
二、Tomcat服务器虚拟目录的映射方式
Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。那么在Tomcat服务器中,如何进行虚拟目录的映射呢?总共有如下的3种方式:
1、方式一:在server.xml文件的host元素中配置
Tomcat的logs/server.xml的文件的host元素,如下图所示:
<host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">unpackWARs="true" autoDeploy="true">
<valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
在这对标签加上即可将在D盘下的JavaWebs这个JavaWeb应用映射到JavaWebApp这个虚拟目录上,JavaWebApp这个虚拟目录是由Tomcat服务器管理的,JavaWebApp是一个硬盘上不存在的目录,是我们自己随便写的一个目录,也就是虚拟的一个目录,所以称之为"虚拟目录",代码如下:
<host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<context path="/JavaWebApp" docBase="D:\JavaWebs" />
</Host>
其中,Context表示上下文,代表的就是一个JavaWeb应用,Context元素有两个属性,
path:用来配置虚似目录,必须以"/“开头。
docBase:配置此虚似目录对应着硬盘上的Web应用所在目录。
使用浏览器访问”/JavaWebApp"这个虚拟目录下的1.jsp这个web资源,访问结果如下:
注意:在Tomcat6之后中,不再建议在server.xml文件中使用配置context元素的方式来添加虚拟目录的映射,因为每次修改server.xml文件后,Tomcat服务器就必须要重新启动后才能重新加载server.xml文件。
2、方式二:让tomcat服务器自动映射
tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问。
例如:把D盘下的JavaWebs这个JavaWeb应用直接copy到tomcat服务器webapps目录中,如下图所示:
此时Tomcat服务器就会自动为JavaWebs这个JavaWeb应用映射一个同名的虚拟目录"/JavaWebs"
3、方式三
在tomcat服务器的\conf\Catalina\localhost目录下添加一个以xml作为扩展名的文件,xml文件的名字可以任意取,比如JavaWebs.xml
在JavaWebs.xml文件中添加Context元素映射JavaWeb应用,代码如下:
<Context docBase="D:\JavaWebs" />
注意:在Context元素中并没有指明path属性来设置虚拟目录的名称,那么"F:\JavaWebs"映射的虚拟目录名称是什么呢,就是当前正在编辑的这个xml文件的名称JavaWebs。
注意:使用这种方式映射虚拟目录的最大好处是修改了配置文件后不用重启Tomcat服务器