在Tomcat中为其他war文件旁边提供单页应用程序

时间:2017-06-15 13:23:35

标签: java tomcat tomcat7

我有一个Tomcat服务器,提供两个.war个文件。第一个映射到上下文/api,第二个映射到根/。后者包含单页AngularJS应用程序。它具有以下web.xml配置:

<servlet>
    <servlet-name>webapp</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>webapp</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<error-page>
    <error-code>404</error-code>
    <location>/</location>
</error-page>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

当我转到https://my.url/时,单页应用的索引页面已正确提供。到目前为止,非常好。

问题是,当我深入链接到我的单页应用程序中的页面时,例如https://my.url/some/resource,Tomcat将给出404.由于error-page配置,它仍将返回索引页面,但仍然是404状态。所以,它有点工作,但不是很好。

我可以让Tomcat返回索引页面,其中包含适用于所有深层链接的200状态代码吗?当然,对/api的调用仍应解析为其他已部署的.war。我想避免在Tomcat中复制AngularJS url定义,因此它应该只返回任何不以/api/开头的请求的索引页。

1 个答案:

答案 0 :(得分:-2)

对于深层链接,您需要在webapp网址模式上使用通配符。类似的东西:

<url-pattern>/*</url-pattern>

不确定它是否会捕获/api/电话。可能需要一些更高级的url模式。