Spring boot 与react单页应用部署在一个jar中

前言

现在的应用开发越来越多的都是前后端分离的项目。比较常见的部署方法是使用nginx 部署,日常项目中我也是用的 nginx。最近在开发一个非常小的项目,想实现傻瓜式一键部署+运行的效果,显然使用 nginx部署对于小白用户不友好。就研究一下如何把前端代码和后端代码打到一个jar中。

实现方法一

思路:

react使用browserHistory模式路由请求的地址,如果spring boot中没有配置则会报 404。
所有的404请求,全部跳转到 react的index.html,路由让前端来处理。这样就实现ajax数据请求走 spring boot其它请求都走index.html。

application.yml
spring:
  mvc:
    view:
      suffix: .html

如果你的配置文件是application.properties,则这样写。

spring.mvc.view.suffix=.html

AntDesignController.java代码:

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 解决React 应用与 spring boot 相结合的问题。
 * 之前我们部署使用 nginx部署,部署复杂度略高一些,通过这样处理,可以一个jar包搞定了。
 * 思路: 当访问的请求不存在,都跳转到react的index.html页面
 * 虽然不够优雅,但是完美解决了spring boot 与 react 应用结合的问题
 * 也许性能上略有损耗,应该是可以忽略不计的。
 * 日期:2020-12-27
 *
 */
@Controller
public class AntDesignController implements ErrorController {
    @Override
    public String getErrorPath(){
        return "/error";
    }

    @RequestMapping(value = "/error")
    public String getIndex(){
        return "index"; //返回index页面
    }

}

这里有个小缺点,如果真正需要显示 404页面如何处理呢?那只能前端来处理了,如何完美处理我暂时没有明确思路。因为我这个项目是一个极小的兴趣项目,目前这个缺点对我几乎不影响。

实现方法二:参考Ant Design Pro文档实现

https://pro.ant.design/docs/deploy-cn
这篇文章中写了不少部署方法。其中spring boot 相关的部署方法我最有兴趣。内容如下:

使用 spring boot

Spring Boot 是使用最多的 java 框架,只需要简单的几步就可以与 Ant Design Pro 进行整合。

首先运行 build

$ npm run build

然后将编译之后的文件复制到 spring boot 项目的 /src/main/resources/static 目录下。

重新启动项目,访问 http://localhost:8080/ 就可以看到效果。

为了方便做整合,最好使用 hash 路由。如果你想使用 browserHistory ,可以创建一个 controller ,并添加如下代码:

@RequestMapping("/api/**")
public ApiResult api(HttpServletRequest request, HttpServletResponse response){
    return apiProxy.proxy(request, response);
}

@RequestMapping(value="/**", method=HTTPMethod.GET)
public String index(){
    return "index"
}

注意 pro 并没有提供 java 的 api 接口实现,如果只是为了预览 demo,可以使用反向代理到
https://preview.pro.ant.design。

点评:
这种思路我看懂了,但是让我困惑的是上面代码中用到的ApiResultapiProxy.proxy(request, response)具体的源码到底是什么?如何实现的?原文只是一笔带过的。
知道如何实现的道友,还请不吝赐教。

参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot一个用于构建Java应用程序的开源框架,它提供了快速、方便的方式来构建独立的、生产级别的应用程序。React一个用于构建用户界面的JavaScript库,它提供了组件化的方式来构建现代化的Web应用程序。 要实现一个图床,可以使用Spring Boot来构建后端服务,使用React来构建前端界面。首先,我们可以使用Spring Boot来创建一个RESTful API服务,用于接收和处理上传的图片文件,并将其保存到服务器的文件系统或者数据库。可以使用Spring Boot提供的各种工具和库来处理文件上传、文件存储、安全控制等功能。 接着,我们可以使用React来构建一个用户友好的前端界面,用于用户上传、浏览和管理图片。通过React组件化的特性,可以轻松地创建用户界面,包括图片上传组件、图片展示组件、图片管理组件等。同时,可以利用React的生命周期函数、状态管理等特性来优化用户体验,并提高前端界面的性能和可维护性。 在将Spring Boot后端服务和React前端界面集成起来时,可以使用RESTful API来实现数据的传输和交互。通过在前端使用Ajax或者Fetch等技术来调用后端API服务,并实现图片的上传、展示和管理功能。 综上所述,使用Spring BootReact来实现图床是一个非常合适的选择。Spring Boot提供了强大的后端服务能力,而React则提供了灵活、高效的前端界面构建方式,通过它们的结合可以实现一个功能完善、易用的图床应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值