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文件中找到默认的首页面,最终显示如下:

posted @ 2015-09-19 19:55  codeplayplus  阅读(616)  评论(0编辑  收藏  举报