使用Java EE/Wildfly的单页面应用程序:服务器端配置

hoe*_*ing 3 java-ee angularjs single-page-application wildfly

我想在客户端编写一个带AngularJS的SPA,在服务器端编写Java EE.如果我理解正确,前端的想法是创建一个默认页面(让我们称之为index.html)并实现路由以交换此默认页面的部分.因此,对于每个请求,都会加载默认页面,并且路由逻辑会根据上下文路径替换其部分:

<!-- index.html -->
<html>
    <body>
        <!-- this block is replaced depending on context -->
        <div ng-view></div>
    </body>
</html>

<!-- page one -->
<div>
    <h1>Page One</h1>
    <a href="/specific">Some specific stuff</a>
</div>

<!-- page two -->
<div>
    <h1>Page Two</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

现在,路由逻辑可能是这样的:

angular.module('myApp', [])
    .config(['$routeProvider', function ($routeProvider) {
        $routeProvider
            .when('/', {templateUrl: 'pages/pageOne.html'})
            .when('/someSpecific', {templateUrl: 'pageTwo.html'})
            .otherwise({redirectTo: '/'});
    }
]);
Run Code Online (Sandbox Code Playgroud)

问题是,如何将其与Java EE和Wildfly服务器实例相结合?如果我声明index.html为欢迎页面http://website.org/someSpecificContext而不执行任何其他操作,则直接调用将失败,因为没有页面映射到路径(并且不应该),因此不会加载页面和角度代码.如果我在servlet过滤器中从每个可能的子路径重定向到index.html,那么路径信息将丢失,因此每个调用都将在索引页面中结束.也许这是一个愚蠢的新手问题,但我真的被困在这里,并会感谢任何帮助.

Fra*_*nck 6

我个人使用了底部重写处理程序.遗憾的是,没有很多关于此功能的文档.你可以找到的信息在这里也是在这里.你必须基本上重写那些只有Angular知道的html 5 url,但是当Angular请求后端数据时你必须用你的服务器端REST组件(我想你正在使用REST)做出响应.我的REST资源位于/api根路径下.这是要放在文件夹中的undertow-handlers.conf文件的示例WEB-INF:

regex['(.*/order/?.*?$)'] and not regex['(.*/api.*)'] -> rewrite['/index.html']
regex['(.*/billing/?.*?$)'] and not regex['(.*/api.*)'] -> rewrite['/index.html']
Run Code Online (Sandbox Code Playgroud)