码迷,mamicode.com
首页 > 其他好文 > 详细

tomcat虚拟主机配置

时间:2015-09-19 21:01:52      阅读:357      评论:0      收藏:0      [点我收藏+]

标签:

1.不配置Context标签

首先我们需要配置一下host文件,路径为C:\Windows\System32\drivers\etc\hosts,该文件是ip地址和域名的映射文件,在该文件中添加如下代码:

127.0.0.1 www.kevin.com

这样当我们在浏览器中输入http://www.kevin.com时,找到的主机就是本地自己的机器[1]

然后打开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目录,并部署上找到的新的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/,结果如下:

技术分享

 

2.配置Context标签,且docBase中配置的war包[1]路径

首先配置hosts文件。

然后修改server.xml文件,添加代码如下:

<!-- This is the virtual host -->
      <Host name="www.kevin.com"  appBase="web_virtual_host"
            unpackWARs="true" autoDeploy="true">
            
            <Context path="" docBase="/web_test" />
            
      </Host>

其中<Context></Context>节点的属性有必要说明一下:

(1)属性docBase

指定web应用程序的文档根目录或者war文件的路径名,你可以指定目录或war文件的绝对路径名,也可以指定相对于Host元素的appBase目录的相对路径名。

这里我们配置的是/ web_test,也就是说web_virtual_host目录下的web_test.war文件

(2)属性path

web应用的上下文路径,通过匹配URI来运行适当的web应用。一个Host中的上下文路径必须是唯一的。如果指定一个上下文路径为空字符串(""),则定义了这个Host的默认web应用(即生成一个ROOT文件夹),会被用来处理所有没有被分配给其他web应用的请求(即如果没有找到相应的web应用,则执行这个默认的web应用,即ROOT)

启动tomcat,可以看到appBase目录(即web_virtual_host)下web_test.war确实被解压了,但被解压成了两个文件夹,如下:

技术分享

打开web_test和ROOT,会发现里面的文件是一样的,这是为什么呢?

这是因为tomcat的appBase目录里面必须要有一个默认的访问目录ROOT,如果没有,则tomcat会将<Context>中docBase所指向的war文件给解压到ROOT文件夹中。另外,由于appBase目录下文件会被tomcat视为web应用,而我们又将Host中的属性unpackWARs设置为true,因此tomcat会自动将web_test.war解压成web_test。

也就是说web_test被部署了两次,因此,建议将war包放到二级目录,像这样:

$CATALINA_HOME\web_virtual_host\war\web_test.war

此时的server.xml文件就是[2]

<!-- This is the virtual host -->
      <Host name="www.kevin.com"  appBase="web_virtual_host"
            unpackWARs="true" autoDeploy="true">
            
            <Context path="" docBase="/war/web_test" />
            
      </Host>

启动tomcat,则appBase目录(即web_virtual_host)下的文件如下:

技术分享

此时除了放有web_test.war的war文件夹外,就只有ROOT文件夹了,ROOT中的文件就是web_test.war解压之后的文件。且此时在浏览器中输入http://www.kevin.com:8080/,显示的结果如下:

技术分享

 

注:

[1]打war包的命令

切换到web应用当前目录,进入到目录,jar -cvf xx.war *,如:

技术分享

[2]需要注意的是,将war包放到webapps目录下,tomcat会自动解压该war包并部署解压后的web应用,但如果将war包放到其他目录下,则tomcat不会帮你自动解压。因此如果想放到其他目录,只能放置解压后的web应用,然后配置Context(即配置一个虚拟目录),如下:

<!-- This is the virtual host -->
      <Host name="www.kevin.com"  appBase="web_virtual_host"
            unpackWARs="true" autoDeploy="true">
            
            <Context path="" docBase="/war/web_test" />
            <Context path="/web_test" docBase="/war2/web_test" />
            
      </Host>

其中docBase表示web应用的路径,path表示web应用名,此时的目录结构如下:

技术分享

由于我们将autoDeploy设置为true,因此tomcat会自动部署该web应用。我们在浏览器中输入http://www.kevin.com:8080/web_test,结果如下:

技术分享

1. 在tomcat启动时部署web应用

翻译:

http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html#Deployment_on_Tomcat_startup

Deployment on Tomcat startup

If you are not interested in using the Tomcat Manager, or TCD, then you‘ll need to deploy your web applications statically to Tomcat, followed by a Tomcat startup. The location you deploy web applications to for this type of deployment is called the appBase which is specified per Host. You either copy a so-called exploded web application, i.e non-compressed, to this location, or a compressed web application resource .WAR file.

【如果你对使用Tmocat Manager或者TCD部署web应用不感兴趣,那么你可以把解压之后的web应用或者war包放到对应Host的appBase目录下,这样它们就会随着tomcat的启动而被部署到服务器】

The web applications present in the location specified by the Host‘s (default Host is "localhost") appBase attribute (default appBase is "$CATALINA_BASE/webapps") will be deployed on Tomcat startup only if the Host‘s deployOnStartup attribute is "true".

【只有当<Host>中的deployOnStartup属性是true的时候,该Host对应appBase下的web应用才会随着tomcat的启动而被部署到服务器。默认的Host是localhost,默认的appBase路径是$CATALINA_BASE/webapps

注:deployOnStartup默认就是true】

The following deployment sequence will occur on Tomcat startup in that case:

【tomcat启动时,部署的顺序如下:】

Any Context Descriptors will be deployed first.

【Context文件会被首先部署

注:

The locations for Context Descriptors are:

$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml

$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml】

Exploded web applications not referenced by any Context Descriptor will then be deployed. Note that if an exploded web application has an associated .WAR file in the appBase, Tomcat will not detect if the associated .WAR has been updated while Tomcat was stopped and will deploy the exploded web application as is. The exploded web application will not be removed and replaced with the contents of the updated .WAR file.

【接着部署的是在Context文件中没有涉及到的,且已经被解压的web应用。要注意的是,如果解压的web应用在appBase目录下还有一个相对应的.war文件,tomcat运行时并不会检测该war文件在tomcat停止后是否进行过更新,而是依旧显示解压后的web应用,并且解压后的web应用的内容也不会随着war文件的更新而改变】

.WAR files will be deployed

【最后部署的是.war文件】

tomcat虚拟主机配置

标签:

原文地址:http://www.cnblogs.com/kevinq/p/4822105.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!