除了engine中定义的默认localhost虚拟主机,另外布置了两个虚拟主机和,它们的程序目录分别为/www/longshuai和/www/xiaofang,所以需要提前建立好这两个目录。另外,在context中定义了docBase,对于uri路径/xuexi,它的文件系统路径为/www/{longshuai,xiaofang}/xuexi目录,所以也要在上面两个程序根目录中定义好xuexi目录。除此之外,还分别为这3个虚拟主机定义了日志,它们的路径为相对路径logs,相对于$CATALINA_HOME。
再提供appBase目录和docBase目录。
mkdir -p /www/{longshuai,xiaofang}/xuexi再提供测试用的index.jsp文件。内容大致如下,分别复制到/www/{longshuai,xiaofang}/和/www/{longshuai,xiaofang}/xuexi/下,并将out.println的输出内容分别稍作修改,使能够区分读取的是哪个index.jsp。
<%@ page language="Java" %> <%@ page import="java.util.*" %> <html> <body> <% out.println("hello world from longshuai Root"); %> </body> </html>最后重启catalina。
catalina.sh stop catalina.sh start再测试主机上添加{longshuai,xiaofang}.com的host记录。例如在windows上,在C:\Windows\System32\drivers\etc\hosts中添加如下记录:
192.168.100.22 www.xiaofang.com在浏览器中进行测试,结果如下:
2. tomcat体系结构基本说明如下图:
tomcat高度模块化,各个模块之间有嵌套的父子关系。如果使用配置文件来描述,可以大致简化为如下:
<server> <service> <connector PORT /> <engine> <host name= appBase=/www/a > <context path="" docBase=/www/a /> <context path="/xuexi" docBase=/www/a/xuexi /> </host> <host> <context /> </host> </engine> </service> </server>其中: server组件是工作在后台管理tomcat实例的组件,可以监听一个端口,从此端口上可以远程向该实例发送shutdown关闭命令。
service组件是一个逻辑组件,绑定connector和containor,有了service表示可以向外提供服务,就像是一般的daemon类服务的service。
connector组件是服务监听组件,用于监听外界请求并建立TCP连接,然后将连接交给containor,之后可以从此连接传输数据,例如接收http请求,发送http响应等。
containor是容器,在配置文件中没有体现出来,它包含4个容器类组件:engine容器、host容器、context容器和wrapper容器。
engine容器用于从connector组件处接收已建立的TCP连接,还用于接收客户端发送的http请求并分析请求,然后按照分析的结果将相关参数传递给匹配出的虚拟主机。engine还用于指定默认的虚拟主机。
host容器定义虚拟主机,由于tomcat主要是作为servlet容器的,所以为每个web应用程序指定了它们的根目录appBase。
context容器对应servlet容器的处理过程。还可以指定相关的wrapper容器类,当然一般都采用默认的标准wrapper类。
最后当请求处理完毕后,context将响应数据返回给host,再返回给engine,再返回给connector,最后返回给客户端。