使用Angular配置Tomcat 8

时间:2017-12-12 20:58:21

标签: angular apache tomcat

我试图在我的本地apache tomcat 8服务器上部署我的角度应用程序。

我使用了ng build --prod并在此复制粘贴dist的结果。

Location of my app on server

我将<base href="/caquiweb/">添加到我的index.html。

因此,我可以访问我的应用程序,路由工作,但404在手动将浏览器中的URL更改为定义的路由器路由时。

Working url by using routerLink

404 manually changing from browser

我认为我必须配置我的服务器,但我真的不知道该怎么做。

提前致谢

3 个答案:

答案 0 :(得分:2)

从我的角度来看最简单的解决方案:

  • WEB-INF/web.xml中添加tomcat/webapps/caquiweb,其中包含以下内容:

<web-app>
    <error-page>
         <error-code>404</error-code>
         <location>/index.html</location>
     </error-page>
</web-app>

这样,每次找不到URL时,Tomcat都会重定向到index.html,然后导致Angular使用组件路由器来处理它。

答案 1 :(得分:0)

此问题是由于角度应用程序中的PathLocationStrategy路由所致。

应用程序的上下文路径为/caquiweb/

您在index.html中设置的应该是-<base href="/">

您必须使用-ng build --base-href /caquiweb/

构建应用程序

您必须按如下所示配置到应用程序根目录index.html的深层链接的重新路由-

  1. 在server.xml中配置RewriteValve
  2. 在rewrite.config中写入重写规则

server.xml-

...
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

...
      </Host>
...

rewrite.config-(位置-{tomcatHome} / conf / Catalina / localhost)

RewriteCond %{REQUEST_PATH} !-f
RewriteRule ^/caquiweb/(.*) /caquiweb/index.html

有关详细说明,请参阅文章-Fixing deep linking issue – Deploying angular application on Tomcat server

答案 2 :(得分:0)

您可以按照这篇精彩博文中所述以编程方式配置重写:https://levelup.gitconnected.com/packaging-your-spring-boot-and-angular-2-projects-together-a13a9c5efdb7

这种方法的优点是您无需更改服务器上的任何内容。您需要更改的唯一文件是您的部署描述符文件,在本例中是您的 web.xml 文件,用于注册您的过滤器。另一个优点是您可以赋予 angular 仅处理其路线的能力。因此,如果您尝试访问资源,例如服务器中的文件或端点,而该资源不存在,您将得到真正的 404。