tomcat虚拟主机配置
首先我们需要配置一下host文件,路径为C:\Windows\System32\drivers\etc\hosts,该文件是ip地址和域名的映射文件,在该文件中添加如下代码:
127.0.0.1 www.kevin.com
这样当我们在浏览器中输入http://www.kevin.com时,找到的主机就是本地自己的机器(浏览器访问web站点的原理可以参考博文http://www.cnblogs.com/kevinq/p/4888305.html)。
然后打开server.xml文件,路径为$CATALINA_HOME/conf/server.xml,在该文件中加入如下代码:
<!-- This is the virtual host -->
<Host name="www.kevin.com" appBase="web_virtual_host"
unpackWARs="true" autoDeploy="true">
</Host>
我们要理解的几个节点和属性的作用:
(1)<Host></Host>节点
即主机的意思,tomcat中支持配置多个虚拟主机
(2)name属性
这是配置多个虚拟主机时的唯一标识,填写的是域名,表示当访问该域名时就会到对应ip的虚拟主机下寻找web应用。
(3)appBase属性
这是虚拟主机的应用程序根目录,该目录中包含有待部署的web应用。路径名可以是绝对路径,或者是相对于$CATALINA_BASE目录的相对路径。如果没有指定,则默认为webapps。
(4)unpackWARs属性
如果为true,则appBase目录下的war包会被自动解压
(5)autoDeploy
如果为true,则tomcat会定期检查appBase和xmlBase目录(appBase和xmlBase等参数的介绍可以参考博文http://www.cnblogs.com/kevinq/p/4822091.html),并部署上找到的新的web应用或者xml文件。更新web应用或者xml文件会触发web应用的重新加载
我们在appBase目录(即web_virtual_host)下添加一个目录web_test,则该目录会被当一个待部署的web应用,然后在web_test目录下添加一个hello.html文件,内容如下:
<h1>This is a virtual host<h1>
我们还可以在web_test目录下添加一个WEB-INF目录,然后在WEB-INF目录下添加一个web.xml文件(可从webapps的ROOT目录下拷贝一份过来),然后修改代码如下:
<welcome-file-list>
<welcome-file>hello.html</welcome-file>
</welcome-file-list>
这样就可以将首页面设置为hello.html
整个目录结构如下:
启动tomcat,在浏览器中输入http://www.kevin.com:8080/web_test/,结果如下:
附:
1.context元素的常用属性
属性 |
描述 |
docBase |
指定web应用程序的文档根目录或者war文件的路径名,你可以指定目录或war文件的绝对路径名,也可以指定相对于Host元素的appBase目录的相对路径名。 |
path |
web应用的上下文路径,通过匹配URI来运行适当的web应用。一个Host中的上下文路径必须是唯一的。如果指定一个上下文路径为空字符串(""),则定义了这个Host的默认web应用,会被用来处理所有没有被分配给其他web应用的请求(即如果没有找到相应的web应用,则执行这个默认的web应用) |
reloadable |
如果设置为true,则tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变,如果发现有类被更新,tomcat服务器将自动重新加载该web应用程序。这个特性在应用程序的开发阶段非常有用,但是它需要额外的运行时开销,所以在产品法布时不建议使用。该属性的默认值是false |
2.host元素的常用属性
属性 |
描述 |
name |
主机名 |
appBase |
虚拟主机的应用程序根目录,该目录中包含有待部署的web应用。路径名可以是绝对路径,或者是相对于$CATALINA_BASE目录的相对路径。如果没有指定,则默认为webapps |
xmlBase |
虚拟主机的xml根目录,该目录中包含有待部署的xml文件。路径名可以是绝对路径,或者是相对于$CATALINA_BASE目录的相对路径。如果没有指定,则默认为conf/<engine_name>/<host_name> |
autoDeploy |
如果为true,则tomcat会定期检查appBase和xmlBase目录,并部署上找到的新的web应用或者xml文件。更新web应用或者xml文件会触发web应用的重新加载 |
unpackWars |
如果为true,则appBase目录下的war包会被自动解压 |
注:
1.$CATALINA_HOME和$CATALINA_BASE
$CATALINA_HOME表示tomcat安装的根目录,比如:D:\Program Files Pro\apache-tomcat-7.0.64。可以通过对每一个实例定义$CATALINA_BASE变量来配置多个tomcat实例,如果没有配置多个实例,则$CATALINA_BASE和$CATALINA_HOME的值相同
2.打包命令
切换到web应用当前目录,进入到目录,然后输入命令jar -cvf xx.war *即可将web应用打包成xx.war,如:
3.关于context中path为空字符串的说明
如果path为空字符串,则定义了这个Host的默认web应用,该web应用会被用来处理所有没有被分配给其他web应用的请求,即如同在浏览器中输入http://localhost:8080会跳转到tomcat主页面一样。
配置server.xml文件如下:
<!-- This is the virtual host --> <Host name="www.kevin.com" appBase="F:\web_virtual_host" unpackWARs="true" autoDeploy="true"> <Context path="/" docBase="F:\web_virtual_host\web" /> </Host>
我们配置了一个主机,名为www.kevin.com;appBase为F:\web_virtual_host,即该目录下的所有文件都会被视为web应用;docBase为F:\web_virtual_host\web,即web也是一个web应用;path="/",即默认的web应用即为F:\web_virtual_host\web,其中的目录结构如下:
启动tomcat,则浏览器中输入http://www.kevin.com:8080/,显示如下:
4.关于context中的docBase为.war文件的说明
当docBase为.war文件时,参数path就表示.war文件解压后被放置的路径
4.1我们修改server.xml文件如下:
<!-- This is the virtual host --> <Host name="www.kevin.com" appBase="F:\web_virtual_host" unpackWARs="true" autoDeploy="true"> <Context path="/test" docBase="F:\web_virtual_host\web\test_web" /> </Host>
此时的test_web是一个.war文件,如下:
启动tomcat,会发现test_web.war文件被解压为appBase的名为test的web应用,如下:
在浏览器中输入http://www.kevin.com/test/hello.html,结果如下:
4.2我们修改server.xml文件如下:
<!-- This is the virtual host --> <Host name="www.kevin.com" appBase="F:\web_virtual_host" unpackWARs="true" autoDeploy="true"> <Context path="/" docBase="F:\web_virtual_host\web\test_web" /> </Host>
此时我们将path设为空字符串,表示这个Host的默认web应用。那么test_web.war文件会被解压到哪里呢?此时test_web.war文件会被解压到ROOT文件夹中,即:
这样当我们在浏览器中输入http://www.kevin.com时,tomcat发现没有指定web应用,就会自动到ROOT文件夹下,又发现没有指定web资源,因此又到WEB-INF的web.xml文件中找到默认的首页面,最终显示如下: