我有一个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/
开头的请求的索引页。
答案 0 :(得分:-2)
对于深层链接,您需要在webapp网址模式上使用通配符。类似的东西:
<url-pattern>/*</url-pattern>
不确定它是否会捕获/api/
电话。可能需要一些更高级的url模式。