提问者:小点点

Java战争中的角路由器模块


我在我的Angular 6.0.5应用程序中使用Angular的路由功能。因此,我的应用程序中有如下路径:

  • http://localhost:8080/area
  • http://localhost:8080/barn
  • http://localhost:8080/tower

使用ng service运行我的应用程序效果很好。我可以直接在浏览器中输入像http://localhost:8080/barn这样的地址,它会加载应用程序并转到应用程序中的适当位置。

构建应用程序后,我将/dist/的全部内容复制到一个Java的WebApplication中,编译后会导致WAR。

要构建它,我使用ng build--prod--build-优化器--base-href=/myappdir/

当我在像Wildfly这样的应用服务器中运行WAR时,我可以成功地URLhttp://localhost:8080/myappdir/并加载应用程序。单击应用程序中的一些路由按钮也成功地将URL更改为http://localhost:8080/barn,但是如果我自己在浏览器中输入URLhttp://localhost:8080/barn,然后按回车键,我会得到一个错误,页面无法加载。

如果我在像Nginx这样的Web服务器上运行一个利用Angular路由功能的Angular应用程序,我必须告诉Web服务器指向index. html文件,即使URL请求不同的文件。所以对于Nginx,这将通过这样的配置来完成:try_files$uri$uri/=404;。所以我想问题在WAR文件中也是一样的。

我必须在WAR文件中配置什么才能使其指向index. html文件?


共2个答案

匿名用户

好的,我自己发现的。所以,如果有人和我一样尝试,这里是解决这个问题的描述,而不需要在Web服务器中进行调整。

在Java项目内部的web. xml中添加404错误页面。以下四行将完成该技巧:

<web-app ...>

    ...

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

</web-app>

匿名用户

您可以将哈希用于路由。这样,您就不会破坏它。在您的app. module.ts中:

RouterModule.forRoot( yourAppRoutes, { useHash: true });