Java WAR中的角度路由模块

Java WAR中的角度路由模块,java,angular,routing,war,angular-routing,Java,Angular,Routing,War,Angular Routing,我在Angular 6.0.5应用程序中使用Angular的路由功能。因此,我的应用程序中有如下路径: http://localhost:8080/area http://localhost:8080/barn http://localhost:8080/tower 使用ng serve运行我的应用程序效果很好。我可以直接键入地址,如http://localhost:8080/barn进入浏览器,它将加载应用程序并转到应用程序中的适当位置 构建应用程序后,我将/dist/的全部内容复制到一个

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

  • http://localhost:8080/area
  • http://localhost:8080/barn
  • http://localhost:8080/tower
使用
ng serve
运行我的应用程序效果很好。我可以直接键入地址,如
http://localhost:8080/barn
进入浏览器,它将加载应用程序并转到应用程序中的适当位置

构建应用程序后,我将
/dist/
的全部内容复制到一个Java Web应用程序中,这将导致编译后的战争

要构建它,我使用
ngbuild--prod--buildoptimizer--base href=/myappdir/

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

如果我在Nginx这样的web服务器上运行Angular应用程序,利用Angular的路由功能,我必须告诉web服务器指向
index.html
文件,即使URL请求不同的文件。因此,对于Nginx,这将是这样的:
try_files$uri$uri/=404。所以我猜WAR文件中的问题也是一样的


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

好的,我自己找到了。因此,如果有人尝试与我相同的方法,下面的描述可以解决这个问题,而无需在web服务器中进行调整

将404错误页面添加到Java项目内部的
web.xml
。以下四行可以实现此目的:

<web-app ...>

    ...

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

</web-app>

...
404
/index.html

您可以对路由使用哈希。这样,你就不会弄坏它。在您的app.module.ts中:

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

@维卡斯感谢三通。第一个我已经知道了,但在那里我必须直接对服务器进行设置,我希望避免这种情况。@Vikas我也喜欢使用
@Controller
,但我不使用Spring。我刚刚创建了一个简单的Java Web应用程序。