如何集成 Angular 2 + Java Maven Web 应用程序

2023-12-24

我创建了一个 Angular 2 前端应用程序。并且创建了一个连接到数据库的 Java Rest WS 后端应用程序。

我的 Angular 2 应用程序的文件夹结构如下-

Angular2App
  confg
  dist
  e2e
  node_modules
  public
  src
     app
     favicon.ico
     index.html
     main.ts
     system-config.ts
     tsconfig.json
     typings.d.ts
  tmp
  typings
  .editorconfig
  .gitignore
  angular-cli.json
  angular-cli-build.js
  package.json
  README.md
  tslint.json
  typings.json

我的 Java Maven Web 应用程序结构如下 -

JerseyWebApp
  src
   main
     java
       Custom Package
       java classes
     resources
     webapp
       WEB-INF
         web.xml
       index.html
  pom.xml

我想知道如何将这两个应用程序集成到一个仅生成一个 war 文件的应用程序中。


这是我所做的:-

  • 安装 Nodejs v6.9+
  • Run npm install @angular/cli –g对于 Angular CLI
  • 安装 Apache Maven 或使用任何 Maven 友好的 IDE
  • 使用您所需的 Maven 配置,我使用简单的 webapp (WAR)。

目录结构(除了ngapp其余文件夹是标准 Maven 结构。)

ngfirst
├── pom.xml
├── src
│   └── main
│       ├── java
│       ├── resources
│       ├── webapp
│       └── ngapp

角部

Open ngapp终端中的文件夹并输入ng init命令初始化节点和 npm 配置,结果将是一个简单的 Angular2 示例应用程序,ngapp 文件夹内将具有以下目录结构:-

             ├── angular-cli.json
             ├── e2e
             ├── karma.conf.js
             ├── node_modules
             ├── package.json
             ├── protractor.conf.js
             ├── README.md
             ├── tslint.json
             ├── src
                 ├── app
                 ├── assets
                 ├── environments
                 ├── favicon.ico
                 ├── index.html
                 ├── main.ts
                 ├── polyfills.ts
                 ├── styles.css
                 ├── test.ts
                 └── tsconfig.json

该结构相当于 Maven 项目结构的 Angular 结构并且src目录是 Angular 应用程序的源代码,就像行家构建命令生成其输出target文件夹,ng build命令生成其输出dist folder.

为了将生成的 Angular 应用程序打包在 Maven 生成的 WAR 中,请修改构建配置以更改输出文件夹dist to webapp, open 角度-cli.json文件并修改其 outDir 如下:-

"outDir": "../webapp/ng"

在此刻ng build命令将在内部生成构建的 Angular 应用程序ngngfirst/src/main/ 目录webapp folder.

Maven部分

打开 pom.xml 并配置以下三个 Maven 插件:-

  1. 编译器插件: /src/main/ 中没有要编译的 Java 内容ngapp文件夹,排除它。
  2. 战争插件:/src/主/ngapp是 Angular 项目文件夹,不应将其打包在 WAR 中,将其排除。
  3. 执行插件:执行NPM Install和Angular-CLI Build命令在webapp文件夹中生成Angular应用程序以进行最终打包。注意 --base-href 参数,需要从 webapp 的上下文路径加载 Angular 资源。

它应该是这样的:-

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
            <excludes>
                <exclude>ngapp/**</exclude>
            </excludes>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
            <excludes>
                <exclude>ngapp/**</exclude>
            </excludes>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.5.0</version>
        <executions>
            <execution>
                <id>exec-npm-install</id>
                <phase>generate-sources</phase>
                <configuration>
                    <workingDirectory>${project.basedir}/src/main/ngapp</workingDirectory>
                    <executable>npm</executable>
                    <arguments>
                        <argument>install</argument>
                    </arguments>
                </configuration>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
            <execution>
                <id>exec-npm-ng-build</id>
                <phase>generate-sources</phase>
                <configuration>
                    <workingDirectory>${project.basedir}/src/main/ngapp</workingDirectory>
                    <executable>ng</executable>
                    <arguments>
                        <argument>build</argument>
                        <argument>--base-href=/ngfirst/ng/</argument>
                    </arguments>
                </configuration>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>  

构建 Maven 项目(还有 Angular 应用程序)

在项目根文件夹中打开终端ngfirst并运行MVN包命令,这将生成一个 WAR 文件(ngfirst.war)target folder.

Deploy ngfirst.war放入容器中,打开http://localhost:8080/ngfirst/ng/index.html http://localhost:8080/ngfirst/ng/index.html在浏览器中。 (如果需要,调整您的主机名和端口)

如果一切顺利,你应该看到应用程序有效!在浏览器中,这就是 Angular 应用程序在工作!

JSP预处理

我们可以通过 Angular 应用程序利用 JSP 技术的动态配置和页面渲染功能,Angular SPA 由 Java 容器作为常规 HTML 页面提供服务,索引.html在这种情况下,如果我们也配置 JSP 引擎来预处理 html 文件,那么所有 JSP 魔法都可以包含在 Angular SPA 页面中,只需在其中包含以下内容web.xml

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

保存,重建 Maven 项目,部署 WAR,瞧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何集成 Angular 2 + Java Maven Web 应用程序 的相关文章

随机推荐

  • 根据textivew的大小调整图片大小

    我有一个TextView因为我正在设置图像drawableLeft
  • 如何从电子邮件获取域名

    如何从 ruby 中的电子邮件地址获取域名 gt gt email protected cdn cgi l email protection split last gt mycorp com
  • gdb 将内存地址解释为对象

    我正在根据可用的核心转储来调查崩溃 崩溃的应用程序是一个C 程序 用gcc构建并在RH5上运行 回溯似乎在 1 帧之前都有效 试图打印我得到的对象
  • 在 neo4j 2.3.1 上安装 neo4j-spatial

    我在 github 上克隆了 neo4j contrib spatial 存储库 但是推荐的 mvn install 不起作用 它会破坏一堆丢失的文件和符号 例如 package org neo4j index impl lucene do
  • FastAPI 应用程序在本地运行,但不在 Docker 容器中运行

    我有一个 FastAPI 应用程序 在本地运行时按预期工作 但是 当我尝试在 Docker 容器中运行时 出现 内部服务器错误 这是我的应用程序的代码 from fastapi import FastAPI from pydantic im
  • 使用 Instagram 基本显示 API 获取用户媒体

    我想使用 Instagram Display API 从帐户检索照片 但在文档中找不到任何内容 最接近的是这个https developers facebook com docs instagram basic display api gu
  • 对象的创建:构造函数或静态工厂方法

    我正在经历有效的Java书中没有建议我认为标准的一些东西 例如对象的创建 我的印象是构造函数是最好的方法 书籍说我们应该使用静态工厂方法 我我无法了解一些优点和缺点 所以我问这个问题 以下是使用它的好处 优点 静态工厂方法的优点之一是 与构
  • Javascript - 箭头在事件处理程序中起作用?

    我是 ES6 的新手 无法完全让它工作 this 点击返回未定义 dom videoLinks click e gt e preventDefault console log this var self this url self attr
  • 删除仅包含空格的空元素

    我想删除空的 p p 从我的页面 这非常适合 p empty remove 但我也有一些 p 在我的页面上 看起来像这样 仅包含大量空格 p p p 不幸的是 它们不被认为是空的 我怎样才能删除它们 像这样的东西应该有效 p each fu
  • 如何在Android中的点击事件上将ListView选择模式从单选择模式切换为多选择模式?

    我想知道如何在单击按钮时将列表视图选择模式从单个切换为多个 这样我就可以选择多个列表项并将其删除 删除后我应该回到单选模式 如果您知道如何实施这一点 请帮助我 谢谢 实施OnClick的功能button并检查ListView的状态模式并根据
  • GoDoc 添加换行符

    我知道 Golang 支持通过以函数名称 拼写为 func 开头的单行注释来记录函数 然而 有一个令人作呕的副作用 拥有多个单行注释不会生成带有换行符分隔每行文本的 GoDoc 这是一张图片来说明 这是该函数及其文档 GetFunction
  • 块排序算法

    来自维基百科页面块排序 http en wikipedia org wiki Sorting algorithm我发现块排序的工作原理是将初始数组划分为长度为 16 的小子数组 例如 在 O n 时间内对所有这些子数组进行排序 然后以我无法
  • 在 O(N + K) 时间内从 N 个整数的数组中提取 K 个最大元素

    因此 我们有一个包含 N 个整数的列表 我们希望从中获得 K 个最大整数 未排序 问题是 这需要能够在 O N K 内运行 作业中是这么说的 我检查了各种算法 甚至制作了自己的算法 但我能得到的最好的算法是 O n k k 我不认为接近 O
  • iText:设置 PDF 视图默认值

    我正在使用 iText 通过 Java 来操作我的 PDF 并且我想让 PDF 默认打开 以便单个页面适合它打开的窗口 该窗口最好是全屏的 并且它在左侧有一个缩略图视图 我知道其他程序可以设置这些视图首选项 所以我假设 iText 可以 但
  • 使用 %chin% 对自动索引 data.table 的字符列进行子集化是否会提高速度?

    TLDR 当使用更新版本时data table使用自动索引 使用有什么好处 chin 在字符列上对 data table 进行子集化 过去 使用 chin from data table代替 in 当对字符向量进行子集化时会导致显着的加速
  • 使用 MVVM 的 WPF 导航

    我正在尝试遵循答案这篇文章中提供 https stackoverflow com questions 19654295 wpf mvvm navigate views 但我一定错过了一些微不足道的东西 我已经定义了我的DataTemplat
  • 在matlab中如何使数组中的所有其他整数都等于0?

    假设我有一个数组 Y 1 2 3 4 5 6 我想创建一个新数组 用 0 替换所有其他数字 因此它创建 y 1 0 3 0 5 0 我将如何着手解决这个问题并以有效的方式为此编写代码 这应该做到这一点 Y 2 2 end 0 通过这一行 您
  • 电子邮件已打开/未从 Nodejs NodeMailer 跟踪

    我知道的 我想在我的网站之一中实现打开 未跟踪的电子邮件 搜索后 我发现电子邮件打开 不跟踪是通过随电子邮件一起发送嵌入图像 通常为 1 像素透明 来完成的 当有人打开电子邮件并且他们允许使用图像时 我们会收到图像请求并进行跟踪 我用什么来
  • 特定线程数

    我想知道特定 Thread 类有多少个活动线程 假设我有一个扩展线程的类 T 在其他一些类 例如 演示 中 我想获取 T 类线程的线程计数 我知道Thread activeCount 方法 但它将获取线程组的计数 它在这里不能满足我的需要
  • 如何集成 Angular 2 + Java Maven Web 应用程序

    我创建了一个 Angular 2 前端应用程序 并且创建了一个连接到数据库的 Java Rest WS 后端应用程序 我的 Angular 2 应用程序的文件夹结构如下 Angular2App confg dist e2e node mod