如何使用 Spring 框架将 Java 控制台应用程序转换为全栈 Web 应用程序?
How to convert a Java console application to a Full Stack web application using Spring Framework?
所以我要转换的项目在https://github.com/zhongjis/keyword_search_engine_xlsm。
本程序旨在构建一个基于用户输入文件 (xlsm) 的搜索引擎。它首先从 XLSM (excel) 文件中提取内容并将它们存储到数据库中。在建立数据库的同时,程序还会计算一些特殊的数字,比如td-idf,这些数字将在后面用于结果排名。
当前使用的技术:
- Gradle
- Java 13
- MongoDB
我想做什么?
- 将此控制台应用程序转换为使用 Spring 框架的全栈 Web 应用程序。这意味着我想添加一个 GUI。
- 在此过渡期间,我试图保留尽可能多的原始代码。对我来说,修改它们以适应 MVC 设计是可以的。
- 一句话,我想让我现在的应用运行在Spring框架上。只有控制台输出就可以了.
我有什么问题?
- 尽管我对 Spring 框架(尤其是 Spring 引导)做了很多研究。但是我仍然在为实施该框架应该首先做什么而苦恼。 我想要一些关于如何开始的建议(或者我应该对我的原始项目进行哪些更改)。我从互联网上学到的所有知识都是向 build.gradle 添加各种依赖项。但我仍然不知道下一步该做什么。 我应该从头开始一个新的 Web 应用程序还是尝试转换当前的应用程序?
谢谢
- 我尽力填写了细节。但是,这个 post 在某些部分可能仍然含糊或令人困惑,需要一些澄清。请随时告诉我,我非常愿意这样做:)
您似乎想要创建一个 Web 应用程序。
最简单的入门方法是使用 Spring Boot,它是 Spring 的 'opinionated' 版本,这意味着它使用智能默认值。您应该首先使用 Initializer 生成您的项目:https://start.spring.io/。继续生成和测试,直到你得到你想要的。
最简单的方法是构建一个可执行 JAR,其中将包含您的 Web 服务器,并且可以 运行 您拥有 Java 的任何地方。这是上面 Initializer 站点上的默认设置。我的建议:接受 Spring 引导默认设置,直到您知道自己在做什么。
界面:
最简单的方法是使用 Thymeleaf 模板来显示您的 HTML.
控制器:
了解如何为 return Thymeleaf 模板编写基本控制器。最简单的开始方式是使用标准 HTML 发布到您的控制器。
文档
Spring 的一大优势是丰富的文档。
参见:https://spring.io/guides/gs/serving-web-content/
和:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html
我建议您从 Spring Initializr 开始,以 bootstrap 一个完全工作的 Spring 启动应用程序。或者,您可以使用 JHipster(https://www.jhipster.tech/),它将创建一个 Spring 引导应用程序和一个您可能更喜欢的前端。
创建基础应用程序
Select 你需要这样的依赖 MongoDB:
构建基本组件
因此 Spring 启动应用程序的基本流程是控制器 -> 服务层 -> 存储库。
控制器将允许您创建带有 @RestController
注释的 REST 端点:
https://spring.io/guides/gs/rest-service/
然后将您的业务逻辑从您的 util 包放入带有 @Service
注释的服务 class 中。
https://medium.com/stackavenue/why-to-use-service-layer-in-spring-mvc-5f4fc52643c0
您将使用 @Autowired
注释将您的服务层自动连接到控制器中。
然后为数据库操作创建一个 Spring 存储库:
https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html
然后@Autowire
将您的存储库放入您的服务层。
总而言之,整个流程是您的前端(Angular、ReactJS 等)对您的 Spring 应用程序进行 HTTP 调用,该应用程序由调用服务层的控制器处理它调用存储库来执行数据库操作。
构建前端
您可以为此使用 Angular。许多前端开发人员更喜欢 React,但对于新用户来说,Angular 在我看来是一个更全面的框架。 https://cli.angular.io/
安装 npm(https://www.npmjs.com/get-npm)
然后执行以下操作以获得功能齐全的 Angular 应用程序并 运行:
npm install -g @angular/cli
ng new my-dream-app
cd my-dream-app
ng serve
然后你可以使用 Angular HttpClient
调用你的 Spring 引导服务:https://angular.io/guide/http
这个 repo 已有几年历史,但它包含一个完整的堆栈 Angular/Spring 启动应用程序,您可以查看以供参考:https://github.com/anataliocs/Exercise-files-full-stack-app-angular-spring-boot.
您也可以使用 Thymeleaf(https://spring.io/guides/gs/serving-web-content/) but most modern Full-stack web apps use a separate front-end app such as Angular, React(https://reactjs.org/), Vue.js(https://vuejs.org/) 等
JHipster
Jhipster 会完成所有这些工作,还会为您连接一个功能完备的前端。 https://www.jhipster.tech/
课程
我在 LinkedIn 学习上也有关于构建全栈应用程序的完整课程,但完全公开,它不是免费服务,但有 30 天的试用期。
我会建议与 KevinB 一样使用 SpringBoot/Thymeleaf 来实现简单的 MVC 风格应用程序,以尽量减少使用过多的技术堆栈。
但在您开始行动之前,请记住 project/application 向新框架或架构的任何迁移首先需要分解组件(源和目标,然后映射它们)。
github 项目使用 MONGODB,您不需要重新设置。
您可以根据功能以两种方式进行迁移,即一次为一个功能构建所有后端和前端
或先开发模拟休息端点,然后在 spring 启动时调用服务端点 UI。
所以我要转换的项目在https://github.com/zhongjis/keyword_search_engine_xlsm。
本程序旨在构建一个基于用户输入文件 (xlsm) 的搜索引擎。它首先从 XLSM (excel) 文件中提取内容并将它们存储到数据库中。在建立数据库的同时,程序还会计算一些特殊的数字,比如td-idf,这些数字将在后面用于结果排名。
当前使用的技术:
- Gradle
- Java 13
- MongoDB
我想做什么?
- 将此控制台应用程序转换为使用 Spring 框架的全栈 Web 应用程序。这意味着我想添加一个 GUI。
- 在此过渡期间,我试图保留尽可能多的原始代码。对我来说,修改它们以适应 MVC 设计是可以的。
- 一句话,我想让我现在的应用运行在Spring框架上。只有控制台输出就可以了.
我有什么问题?
- 尽管我对 Spring 框架(尤其是 Spring 引导)做了很多研究。但是我仍然在为实施该框架应该首先做什么而苦恼。 我想要一些关于如何开始的建议(或者我应该对我的原始项目进行哪些更改)。我从互联网上学到的所有知识都是向 build.gradle 添加各种依赖项。但我仍然不知道下一步该做什么。 我应该从头开始一个新的 Web 应用程序还是尝试转换当前的应用程序?
谢谢
- 我尽力填写了细节。但是,这个 post 在某些部分可能仍然含糊或令人困惑,需要一些澄清。请随时告诉我,我非常愿意这样做:)
您似乎想要创建一个 Web 应用程序。
最简单的入门方法是使用 Spring Boot,它是 Spring 的 'opinionated' 版本,这意味着它使用智能默认值。您应该首先使用 Initializer 生成您的项目:https://start.spring.io/。继续生成和测试,直到你得到你想要的。
最简单的方法是构建一个可执行 JAR,其中将包含您的 Web 服务器,并且可以 运行 您拥有 Java 的任何地方。这是上面 Initializer 站点上的默认设置。我的建议:接受 Spring 引导默认设置,直到您知道自己在做什么。
界面: 最简单的方法是使用 Thymeleaf 模板来显示您的 HTML.
控制器: 了解如何为 return Thymeleaf 模板编写基本控制器。最简单的开始方式是使用标准 HTML 发布到您的控制器。
文档 Spring 的一大优势是丰富的文档。 参见:https://spring.io/guides/gs/serving-web-content/ 和:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html
我建议您从 Spring Initializr 开始,以 bootstrap 一个完全工作的 Spring 启动应用程序。或者,您可以使用 JHipster(https://www.jhipster.tech/),它将创建一个 Spring 引导应用程序和一个您可能更喜欢的前端。
创建基础应用程序
Select 你需要这样的依赖 MongoDB:
构建基本组件
因此 Spring 启动应用程序的基本流程是控制器 -> 服务层 -> 存储库。
控制器将允许您创建带有 @RestController
注释的 REST 端点:
https://spring.io/guides/gs/rest-service/
然后将您的业务逻辑从您的 util 包放入带有 @Service
注释的服务 class 中。
https://medium.com/stackavenue/why-to-use-service-layer-in-spring-mvc-5f4fc52643c0
您将使用 @Autowired
注释将您的服务层自动连接到控制器中。
然后为数据库操作创建一个 Spring 存储库: https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html
然后@Autowire
将您的存储库放入您的服务层。
总而言之,整个流程是您的前端(Angular、ReactJS 等)对您的 Spring 应用程序进行 HTTP 调用,该应用程序由调用服务层的控制器处理它调用存储库来执行数据库操作。
构建前端
您可以为此使用 Angular。许多前端开发人员更喜欢 React,但对于新用户来说,Angular 在我看来是一个更全面的框架。 https://cli.angular.io/
安装 npm(https://www.npmjs.com/get-npm)
然后执行以下操作以获得功能齐全的 Angular 应用程序并 运行:
npm install -g @angular/cli
ng new my-dream-app
cd my-dream-app
ng serve
然后你可以使用 Angular HttpClient
调用你的 Spring 引导服务:https://angular.io/guide/http
这个 repo 已有几年历史,但它包含一个完整的堆栈 Angular/Spring 启动应用程序,您可以查看以供参考:https://github.com/anataliocs/Exercise-files-full-stack-app-angular-spring-boot.
您也可以使用 Thymeleaf(https://spring.io/guides/gs/serving-web-content/) but most modern Full-stack web apps use a separate front-end app such as Angular, React(https://reactjs.org/), Vue.js(https://vuejs.org/) 等
JHipster
Jhipster 会完成所有这些工作,还会为您连接一个功能完备的前端。 https://www.jhipster.tech/
课程
我在 LinkedIn 学习上也有关于构建全栈应用程序的完整课程,但完全公开,它不是免费服务,但有 30 天的试用期。
我会建议与 KevinB 一样使用 SpringBoot/Thymeleaf 来实现简单的 MVC 风格应用程序,以尽量减少使用过多的技术堆栈。
但在您开始行动之前,请记住 project/application 向新框架或架构的任何迁移首先需要分解组件(源和目标,然后映射它们)。
github 项目使用 MONGODB,您不需要重新设置。
您可以根据功能以两种方式进行迁移,即一次为一个功能构建所有后端和前端
或先开发模拟休息端点,然后在 spring 启动时调用服务端点 UI。