war包部署到tomcat的疑问

war包具体是怎样部署到tomcat里面的,这里就不作详细说明了,不少高手都有本身的"独到"教程,哈哈.html

下面就列出如下几个疑问,并做简单的解释.
web

1. war包是什么?算法

按照个人理解,它仅仅是个压缩包,解压后(别告诉我你不会解压)你就发现里面就包含了"一个WEB项目"在发布到web容器时所该包含的全部东西. 简单来讲你能够理解为是一个.zip或者是.rar的压缩文件,只是它们的压缩算法不同,而且.war能够被tomcat自动解压.
apache

2. war包怎么来的?tomcat

目前来讲,我所知道的也是我惟一知道方式是经过maven进行打包生成的. 若是还有其它方式,望大牛们告知.
app

3. war包在部署到tomcat时应该放在哪一个目录?dom

不少教程里面说到的是拷贝到tomcat根目录下的webapps文件夹里面就能够,固然,这个是没有错的. 对于这个问题,咱们先看下tomcat的配置文件: ${CATALINA_HOME}/conf/server.xml , 找到这一段(这里是默认配置):webapp

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 </Host>

咱们要理解的几个节点和属性的做用:maven

    1) <Host></Host>节点测试

        故名思意,主机的意思,Tomcat中支持配置多个虚拟主机,默认的就是这个"localhost".

    2) <Host>中的"name"属性

        这里就是配置多个虚拟主机时的惟一标识,填写的是域名,表示当访问哪一个域名时会到该虚拟主机下找web应用.

    3)<Host>中的"appBase"属性

        这个是设置虚拟主机存放web应用的目录,填写的是目录,能够是绝对路径也能够是相对于tomcat根目录的相对路径,注意哦,这个属性跟下面配置war路径的时候也有必定的联系的.

    后面的两个属性从字面上也好理解了,一个是unpackWARs:解压war文件, 一个是autoDeploy:自动发布.

大概理解了这几个属性后,咱们能够尝试在tomcat的配置文件中本身配置一个新的"虚拟主机"(忽略默认的,尝试点新鲜的),并将war发咱们的新建的虚拟主机的发布目录里,在配置文件(${CATALINA_HOME}/conf/server.xml)中加入:

<Host name="test.yourdomain.com" appBase="D:\myWebapps" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="my-web" debug="0" privileged="true"/>
</Host>

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

    1)属性"docBase"

        配置某一个war包文件的路径. 好比:

            Ⅰ) 若是个人my-web.war包在"D:\myWebapps\my-web.war, 则此时docBase只需设置为: docBase="my-web"

            Ⅱ) 若是个人my-web.war包在"D:\myWebapps\war\my-web.war, 则此时docBase只需设置为: docBase="/war/my-web"

            (注意:这里只须要写war的文件名字便可,后缀可不要,有些教程是有加后缀的,测试过也能够)

    2) path用于配置虚拟路径,默认是"",也就是访问 "test.yourdomain.com" .

按照上面的配置,启动tomcat后,打开D:\myWebapps时,你会发现已经将my-web解压了,此时会解压成了两个文件夹,如图:

看到这个图,也就提出个人第四个疑问.

4. 为何会一个war文件会解压成两个文件夹?

    打开两个文件夹, 发现里面的文件是同样的.

    原来tomcat的appBase目录里面必需有一个默认的访问目录ROOT,若是没有,tomcat会将<Context>中path=""所指向的war文件给解压到ROOT文件夹中. 另外,tomcat还会将appBase下的demo.war文件解压到和它同名的demo文件中,这就出现了两个文件夹.


最后的建议:

① war文件最好不要文件<Host></Host>中appBase目录的根目录中.

    因此一些教程里面说直接拷贝到默认配置中的webapps文件中,我的感受是不太好的,固然也不是不能够,具体看怎么配置了,哈哈.

②建议将war放到appBase的二级目录里,像这样:

D:\myWebapps\wars\my-web.war

    配置的时候就变成这样了:

<Host name="test.yourdomain.com" appBase="D:\myWebapps" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="/wars/my-web" debug="0" privileged="true"/>
</Host>

   这样的配置,在启动tomcat后,就只会生成ROOT文件夹,而且默认访问的就是你的my-web.war的web应用.


写在最后:

以上的疑问和解答也让我本身顺利的完成war部署到tomcat上,但愿对在部署过程当中遇到问题的同仁们有些许帮助.

另外,以上纯属我的的理解,若有错误,求指导指导,哈哈~~

相关文章
相关标签/搜索