web程序war包发布到tomcat的webapps下会解压俩次?

Linux环境.


  1. 假设我的war包名为project.war
  2. 发布到tomcatwebapps下,
  3. bin目录下执行./startup.sh启动命令
  4. 之后webapps目录下出现ROOT文件夹和project文件夹.
  5. 而且启动时看logs/catalina.out感觉项目启动了俩次.
  6. 是我的server.xml哪里配置错了吗?还是本身就应该这样呢?
下面是server.xml的配置内容
<?xml version='1.0' encoding='utf-8'?>
<Server port="18003" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="18082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="18011" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="../webapps/projectName"
                 debug="0" reloadable="true" crossContext="true" />
        <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>
    </Engine>
  </Service>
</Server>
阅读 4.2k
2 个回答

参考链接

参考链接2

上面俩个链接很好的解决了我的问题.
关键之处,就在下面的代码配置中

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false" deployOnStartup="false">
            <Context path="" docBase="../webapps/project"
                 debug="0" reloadable="false" crossContext="true" />

appBase下面的所有项目都会被部署 所以设置autoDeploy="false" deployOnStartup="false"
如果不指定context,那么确实会只解压部署一次,但是解压完的项目名并不是ROOT这个特殊文件夹,
所以访问项目的时候得带上项目名.这不是我想要的效果.
context中得path指定为""那就是默认的ROOT,docBase指定项目文件夹或war文件的位置.
不知道我表述的是否清楚,遇到同样问题的朋友可以参考上面的俩个链接.

新手上路,请多包涵

你从哪里判断他解压了两次?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题