在Jersey webapp中运行Angular2应用

时间:2017-09-29 09:17:25

标签: angular typescript jersey

我有两个不同的项目,一个用于Angular2中的前端,另一个用于后端,在Java中使用Jersey。

我想要实现的是让服务器提供前端应用程序,同时为后端提供服务(从而避免使用CORS头文件)。

使用命令ng build --output-path PATH/TO/WEBAPP-FOLDER构建角度应用程序时遇到问题。

当服务器启动并且我转到PATH/TO/WEBAPP-FOLDER/index.html(我的角应用程序启动的地方)时,当浏览器请求我的索引页面中包含的JS文件时,我遇到了很多404错误,尽管我的文件夹结构包含它们。

我是否需要在Angular配置中执行某些操作才能正确地为JS文件提供服务?

我的webapp文件夹结构是:

-assets/
-favicon.ico
-index.html
-inline.bundle.js
-inline.bundle.js.map
-main.bundle.js
-main.bundle.js.map
-polyfills.bundle.map
-polyfills.bundle.js.map
-styles.bundle.js
-styles.bundle.js.map
-vendor.bundle.js
-vendor.bundle.js.map
-WEB-INF
    web.xml (this is for Jersey)

我生成的index.html页面是:

<!DOCTYPE html>
<html>

<head>
  <base href="/">
  <title>Angular QuickStart</title>
  <base href="/">
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="styles.css">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M"
    crossorigin="anonymous">
  <!-- Polyfill(s) for older browsers -->
  <script src="node_modules/core-js/client/shim.min.js"></script>

  <script src="node_modules/zone.js/dist/zone.js"></script>
  <script src="node_modules/systemjs/dist/system.src.js"></script>

  <script src="systemjs.config.js"></script>
  <script>
    System.import('main.js').catch(function (err) { console.error(err); });
  </script>
</head>

<body>
    <my-app>Loading AppComponent content here ...</my-app>
<script type="text/javascript" src="inline.bundle.js"></script><script type="text/javascript" src="polyfills.bundle.js"></script><script type="text/javascript" src="styles.bundle.js"></script><script type="text/javascript" src="vendor.bundle.js"></script><script type="text/javascript" src="main.bundle.js"></script></body>

</html>

此外,systemjs.config.js文件无处可寻。我没有正确运行构建命令吗?

2 个答案:

答案 0 :(得分:0)

您可能需要考虑在index.html中使用base href。基本标记中的href指定页面中所有相对URL的基本URL。因此,当您使用输出路径“PATH / TO / WEBAPP-FOLDER”构建时,您可能想尝试给出基础href =“PATH / TO / WEBAPP-FOLDER”。这将从“domain-name / PATH / TO / WEBAPP-FOLDER”提供应用程序。

答案 1 :(得分:0)

我对Angular(4)和Java / Spring有类似的情况。与OP类似,为了解决CORS设置问题,我将整个Angular应用程序内容(从CLI生成的文件夹/ my-app)复制到名为/ angular的新文件夹中,该文件夹位于我的Java Maven项目的根目录下。我制作了一个自定义构建文件来运行

ng build --base-href /my-java-project/

然后在maven构建期间,使用maven-resource-plugin将/ dist内容从/ angular / dist移动​​到$ {project.build.directory} / my-java-project。默认情况下,angular将尝试在部署的根目录中查找资源。