如何使用 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,这些数字将在后面用于结果排名。

当前使用的技术:

我想做什么?

我有什么问题?

谢谢

您似乎想要创建一个 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 引导应用程序和一个您可能更喜欢的前端。

创建基础应用程序

https://start.spring.io/

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。