我有一个在Liberty WebSphere Server 17.0.0.2上使用AngularJS + JSP的项目,现在我必须对它进行升级。该项目需要升级到Angular 4 + Liberty,我不知道如何正确地完成它。
我现在尝试的是:
使用Angular-CLI构建项目以生成 dist 文件夹。然后,我将 dist 放在 WEB-INF >上的视图即可。我还在spring-context.xml,web.xml和server.xml(在Liberty端)上做了引用,但是当我尝试访问localhost时,我得到的是404错误:9090 / AngularPoC / dist / index
提前谢谢。
答案 0 :(得分:3)
我将概述如何通过(Open)Liberty设置我的Angular应用程序:
将ng build
命令的产品复制到.war文件的根目录。
这意味着根据您的构建方式将其放在不同的位置。如果您使用的是Eclipse / WDT,则可能意味着将输出设置为WebContent
文件夹。如果您将Gradle与war插件一起使用,它将直接进入src/main/webapp
。虽然我最初使用ng build --output-dir=...
设置了输出文件夹,但我发现这会删除该文件夹,所以每次构建都会丢失我的web.xml。我建议您在构建的后续步骤中复制dist
的内容,除非您可以从上下文根的子文件夹中提供服务。
为深层链接设置错误重定向。
如果使用Angular Router模块,则需要设置链接和刷新深层路由。默认情况下,Liberty为任何不存在的路径提供404错误页面。如果用户在URL栏包含进入应用程序的深层路径时刷新页面,他们将获得该错误页面。您需要进行设置,以便将所有404请求路由回index.html
(location
通常应指向与base-href
相同的位置,请参见下文。)在网络中。 xml,我有
<error-page>
<error-code>404</error-code>
<location>/</location>
</error-page>
另一种选择是使用使用较旧锚语法的HashLocationStrategy
。路由放在URL的哈希片段中。这意味着您不必设置错误页面,但这也意味着您将来无法使用单独的页面无法替换深层路由 - 如果有任何书签,人们将不得不更新书签
这是通过更新您的app-routing.module.ts
文件以在导入行上指定RouterModule.forRoot(routes, {useHash: true})
来完成的。
确保base-href匹配。
确保base-href
中的index.html
指向包含该index.html的路径以及生成的CSS和JS文件。否则你会发现没有任何负载,你的网络检查员会得到一堆404。如果context-root发生更改,则需要更新此值。我的网络应用通常具有直接位于其下的index.html的上下文根/
,因此我的base-href
为/
。