无法在server.xml之外定义上下文

时间:2014-06-14 00:25:24

标签: java xml spring tomcat

尝试启动Tomcat 7应用程序并了解一些事情:

  1. 在Tomcat的早期版本中,Context Descriptor配置的内容通常存储在Tomcat的主配置文件server.xml中,但现在不鼓励这样做(尽管它目前仍然有效)。

  2. 上下文描述符的位置是: $ CATALINA_BASE / CONF / [引擎] / [主机名] / [webappname] .XML $ CATALINA_BASE / web应用/ [webappname] /META-INF/context.xml

  3. 所以这就是我们的应用程序的布局方式(不可协商):

    Tomcat + WAR: /some/dir/MyApp/* some/dir/MyApp/webapps
    LOGS: /some/other/dir/logs/MyApp/
    

    应用程序启动后没有错误,我发出以下请求:

    http://foo/static/index.html
    

    当我在$ CATALINA_HOME / conf / server.xml中定义上下文时,一切都很美:

    <Host name="localhost"  appBase="webapps"
       unpackWARs="false" autoDeploy="true">
    
        <Context path="/" docBase=“MyApp.war" />
    
        <Valve className="org.apache.catalina.valves.AccessLogValve"
               directory="/some/other/dir/logs/MyApp"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
    </Host>
    

    现在,为了避免将上下文放在server.xml中,我尝试了几件事。我从server.xml中删除了上下文,然后创建了$ CATALINA_HOME / conf / Catalina / localhost / MyApp.xml文件。

    <Context
      docBase=“/some/dir/MyApp/webapps/MyApp.war"
      path=""
      reloadable="false"
      swallowOutput="true"
      sendRedirectBody="true"
    >
      <Valve className="org.apache.catalina.valves.AccessLogValve"
       prefix="localhost_access_log." suffix=".txt"
       pattern="common"/>
    </Context>
    

    - &gt;失败:13 / Jun / 2014:17:03:53 -0700]“GET /static/index.html HTTP / 1.1”404 -

    - &gt; MyApp.log:主机appBase中的docBase /some/dir/MyApp/webapps/MyApp.war已被指定,将被忽略

    接下来我尝试从server.xml中删除上下文,删除$ CATALINA_HOME / conf / Catalina / localhost / MyApp.xml,但创建$ CATALINA_HOME / conf / context.xml:

    <Context>
        path = ""
        docBase=“MyApp.war"
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>
    

    - &gt;失败:13 / Jun / 2014:17:03:53 -0700]“GET /static/index.html HTTP / 1.1”404 -

    我使用和不使用路径尝试了上面的context.xml,并且定义了docBase,两者都产生相同的404。

    我错过了什么?

1 个答案:

答案 0 :(得分:2)

您甚至不需要手动定义上下文。如果您希望将应用程序部署在根目录上,只需将战争重命名为ROOT.war并将其放在webapps目录中(删除所有出现的内容)。

Tomcat查看webapps目录(实际上,它可以通过主机上的appBase属性进行更改)来部署war。

See tomcat Documentation for more details.