Java 在server.xml之外定义上下文时出现问题

Java 在server.xml之外定义上下文时出现问题,java,xml,spring,tomcat,Java,Xml,Spring,Tomcat,尝试启动Tomcat 7应用程序并了解以下几点: 在Tomcat的早期版本中,上下文描述符配置的内容通常存储在Tomcat的主配置文件server.xml中,但现在不鼓励这样做(尽管它目前仍然有效) 上下文描述符的位置为: $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml 下面是我们应用程序的布局方式(不可协商)

尝试启动Tomcat 7应用程序并了解以下几点:

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

  • 上下文描述符的位置为: $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

  • 下面是我们应用程序的布局方式(不可协商):

    在应用程序启动且无错误后,我会请求:

    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>
    
    
    
    -->失败:2014年6月13日:17:03:53-0700]“GET/static/index.html HTTP/1.1”404-

    -->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>
    
    
    path=“”
    docBase=“MyApp.war”
    WEB-INF/WEB.xml
    
    ->失败:2014年6月13日:17:03:53-0700]“GET/static/index.html HTTP/1.1”404-

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


    我缺少什么?

    您甚至不需要手动定义上下文。如果您希望将应用部署在根目录上,只需将war重命名为root.war并将其放入webapps目录(删除所有事件)

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


    为什么要处理上下文路径?为什么不让Tomcat处理它,并抛出一个反向代理(比如nginx)在前面。一直在阅读那些文档,只是觉得重命名为ROOT.war不是一件好事。做了更改,现在点击
    获得200http://foo/static/index.html
    ,但我在
    http://foo/static/js/bar.js
    这不是你想要的吗?你没有错或者,tomcat只是对你的浏览器说,自从上次访问ressource以来,它没有更新。我被解雇了…出于某种原因考虑重定向,而不是不修改,页面是一个存根,所以我点击了一下,什么也没有发生。非常感谢。。。
    <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>
    
    <Context>
        path = ""
        docBase=“MyApp.war"
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>