精华内容
下载资源
问答
  • Springboot+React前后端整合
    千次阅读
    2019-11-15 10:53:11

    Springboot+React前后端整合

    前端执行yarn build,将构建好的文件放入项目的static底下

    前端配好相对路径,避免发生访问不到路径的问题
    在这里插入图片描述

    更多相关内容
  • 基于flask和vue的前后端整合框架,开箱即用 后端使用flask-restplus开发,自带swagger,基于flask_marshmallow序列化对象,orm使用flask-sqlalchemy,已经集成基于token的用户认证,日志功能 后端backend 使用方法:...
  • springmvc +jquery springmvc+ mybatis 整合 实例 带数据库
  • springboot+vue 前后端分离 整合教程额外补充 详情请查看文档资料 2020年11月12日10:25:51
  • 主要为大家详细介绍了Spring boot整合shiro+jwt实现前后端分离,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 前后端分离到前后端整合进行开发

    千次阅读 2016-08-01 19:53:00
    因为实在感觉现在本地开发模式效率有点低(真正项目里我们还是要做前后端分离的哈),我花了2天的时间对现有的项目进行了一下改造,就是将前后端代码合并起来,这里就简单的介绍下如何用再一个项目里同时维护前后端...

    首先我是很赞同业界的前后端分离的开发模式,虽然现在都讲究全栈工程师,但是毕竟术业有专攻,前端同学专注多终端,后端同学关注高性能高可用。大家各自再自己的专注点上发光发热。

    想想我们以前分模块开发,既写java又写jsp,高级点的jsp不写逻辑,所有的交互都是异步交互,算是一个简单的前后端分离模型,最后找个美工(对,不是前端是写css或者会画图的美工画两个图)美化一下,然后就可以用起来了,这样的模式简直就是原始社会一样。

    目前我同时接手了前后端同学给我的2份代码后,一个人做起了前后端分离开发,我感觉自己一下子高大上了起来,但是有几点我也要吐槽一下

    1我要维护2分代码,一份用webstorm编译js代码,一份用intelidea开发编译java代码,同时开了java和node服务本地联调,这2个服务光开起来就已经7G内存了(jvm我开的是1024M,因为需要加载对象内存处理)。可怜的X1的内存是焊死的...焊死的....,而且只有8G....基本再开chrome就卡死了,卡死了。。。

    2 本地开发模式是这样的,前端代码用node开启一个server跑页面,后端代码开启跑接口服务,用页面调用后端的接口服务,这就遇到一个尴尬的js跨域调用服务的问题,还好chrome良心支持这个参数,又还好IE我们已经放弃了。。。

    "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-web-security --user-data-dir

    但是由此升级chrome到51这个版本,新浏览器又出现跨域调不通的问题了,那时我的世界是崩溃的,以后怎么开发吖

    还好网上有解决方案,感谢万能的google,对于新版本的chrome浏览器,需要额外增加user-data-dir,然后就可以继续愉快的写代码了

    这里我还要吐槽下以前的npm脚本

    "scripts": {
      "clean": "./node_modules/.bin/rimraf build",
      "build:webpack": "NODE_ENV=production ./node_modules/.bin/webpack --config webpack.config.prod.js",
      "build": "npm run clean && npm run build:webpack",
      "mock": "MOCK=true npm run start",
      "start": "./node_modules/node/bin/node server.js",
      "lint": "./node_modules/.bin/eslint src",
      "lintfix": "./node_modules/.bin/eslint src --fix",
      "daily": "npm run build && git add -A && git commit -am 'deploy test' && git branch -D daily/9.9.9 || true && git branch daily/9.9.9 && git push -f origin daily/9.9.9 && git reset --hard HEAD~"
    },

    看里面的反斜线,好像windows都不能用吖,只能自己搞个bat脚本封装下,基本上再window下告别npm命令了

    echo "====start daily publish"
    call .\node_modules\.bin\rimraf build
    set NODE_ENV=production
    call .\node_modules\.bin\webpack --config webpack.config.prod.js
    call git add -A
    call git commit -m 'dailypublish'
    call git branch -D daily/9.9.9
    call git branch daily/9.9.9
    call git push -f origin daily/9.9.9
    echo "====end daily publish"

    3 最后吐槽一下发布和回滚问题

    有段时间需求实在太多,团队增加一个同学一起开发,注意下前端这块,我们都是用分支开发,发到预发的时候代码是都要合并到daily9.9.9这个分支的,然后触发一个钩子,这个钩子会把这9.9.9的代码放到cdn上,就是2个会合用一个分支,预发环境经常是代码被各种冲掉,这个后端的开发和发布系统支持的就好,环境只有一个,但是每次发布只能发一个分支。这样可以各种切换,而不是暴力的合并

    另外,由于后端代码一次发布可能会有多次的前端发布,所以前端的版本号其实是和后端的版本号不一致的,如果线上出了故障,后端代码进行回滚我可能准确的回滚到一个版本,但是前端代码的版本号是跳跃的,很难回滚到后端同一时刻的版本

    4 最后就是接口和代码设计的问题

    由于前后端代码是不同同学开发的,当前端A同学需要一个列表数据会跟后端B同学要一个get接口,这时候B同学提供一个接口服务返回一串数据给前端,我看过一个之前的代码前端拿到这个数据活生生的在前端做了一个排序,各种map各种比较,其实这个在后端数据库层面或者内存层面做一下非常简单。

    5 最后讲讲编译问题

    之前我手上还有一个项目,也是前后端代码分开的,这个比较特殊,前端是GXT写的,恩就是用java写的EXT,写前端的页面的时候非常痛苦,GXT的编译特别慢,有的时候改一个页面编译一下要1分钟,另外发布的时候非常原始,写好GXT的代码把代码打包成war包,然后copy出里面的静态页面再放到后端代码里,后端代码再打成war包进行发布

    相比现在来说现有项目已经很好了,前端写好代码push到指定分支上就能自动部署到cdn上,然后后端的vm直接读取cdn上的静态资源。但是后端的发布往往要等cdn部署完毕才能真正生效,根本原因还是不是引得本地文件


    因为实在感觉现在本地开发模式效率有点低(真正项目里我们还是要做前后端分离的哈),我花了2天的时间对现有的项目进行了一下改造,就是将前后端代码合并起来,这里就简单的介绍下如何用再一个项目里同时维护前后端代码

    这里涉及到webpack打包操作,用mvn进行npm操作,前台代码的热部署及前端代码的合并分发

    1 线上改造后的代码结构

    其中node是maven下运行npm的插件引入的,node_modules是前端依赖包(可以理解成java中maven引入的本地仓库),将原有的前端文件放到了webapp中

    其中build是webpack打包生成的输出文件,index页面引用的就是这里的合并后的js和css,app.js是前端的入口文件

    其他文件就是后台和前端的配置文件了,前端的主要打包文件是webpack.config

    2 定义npm的打包命令

    "mydaily":".\\node_modules\\\\.bin\\webpack-dev-server --config webpack.config.js  --inline ",
    #"mydaily":".\\node_modules\\\\.bin\\webpack --config webpack.config.js --hot  --progress --colors --watch",
    "mybuild":".\\node_modules\\\\.bin\\webpack --config webpack.config.js --output-public-path /build/",
    "myclean": ".\\node_modules\\\\.bin\\rimraf  .\\src\\main\\webapp\\build",
    "mystart": ".\\node_modules\\node\\bin\\node  server.js",

    其中mydaily定义的的是的本地开发模式,mybuild是打包线上发布文件,myclean是清除文件,mystart是为了兼容前端开发同学保留的命令,直接用node本地启动服务,当然还有一些其他的调用eslint等辅助控件这里就不一一列出了

     

    3 本地开发模式下如何引用前端输出的静态资源呢

    indexvm里是这么写的

    ##  <link rel="stylesheet" href="http://localhost:8080/build/style.css"/>
    ##  <script src="http://localhost:8080/build/vendors.js"></script>
    ##  <script src="http://localhost:8080/build/app.js"></script>

    这里有个关键的启动命令,本地在npm的时候使用的是webpack-dev-server。这个命令可以虚拟出一个服务,并且配置了热加载,我们可以看到文件的publicpath配置的就是8080端口下的这个地址

    output: {
      path: path.resolve(__dirname, 'src/main/webapp/build'),
      filename: '[name].js',
      publicPath: 'http://localhost:8080/build/',
    },

    如果是线上发布,就直接启动webpack,将文件编译好发布到build文件夹

    4 如何做前端资源热加载的,这里有2个地方要配置下

    一是使用一个jsx的loader使用的react-hotloader

    二是配置idea的自动监听功能

    这样就可以做到热部署了

     

    5 如何用maven维护npm的打包和编译呢

    这里就要提到mavne下一个插件了frontend-maven-plugin,因为无论是线上aone打包还是线下打包其实调用的都是mvn clean install命令,这时候会自动触发这个插件中的命令,我本地的配置如下

    <!--前端打包-->
    <plugin>
      <groupId>com.github.eirslett</groupId>
      <artifactId>frontend-maven-plugin</artifactId>
      <version>1.0</version>
      <executions>
        <execution>
          <id>install node and npm</id>
          <goals>
            <goal>install-node-and-npm</goal>
          </goals>
          <configuration>
            <nodeVersion>v5.2.0</nodeVersion>
            <npmVersion>3.3.0</npmVersion>
            <nodeDownloadRoot>https://npm.taobao.org/mirrors/node/</nodeDownloadRoot>
            <npmDownloadRoot>http://registry.npmjs.org/npm/-/</npmDownloadRoot>
          </configuration>
        </execution>
        <execution>
          <id>npm install</id>
          <goals>
            <goal>npm</goal>
          </goals>
          <configuration>
            <arguments>install</arguments>
          </configuration>
        </execution>
        <execution>
          <id>npm run build</id>
          <goals>
            <goal>npm</goal>
          </goals>
          <configuration>
            <arguments>run mybuild</arguments>
          </configuration>
        </execution>
      </executions>
    </plugin>

    这个插件会在maven命令执行的时候自动执行配置好的npm命令,所以在打包的时候就会自动触发npm run mybuild命令打包最新的静态资源到war包中,这样就无需在引用cdn中的文件了

    经过以上5部改造,基本上可以实现前后端代码同时维护和开发,保证了本地开发的效率。但是未来多端及服务化,前后端分离还是大趋势,我们还是要尽量摒弃小作坊的开发模式,让代码在稳定的基础上最大的保证开发效率。另外还是要像全栈开发努力,因为很多功能前端做起来很容易,但是后端要写一大堆不可维护的代码来实现,有的时候前端要做很复杂的代码,后端可能一个sql就搞定了。

    转载于:https://my.oschina.net/zimingforever/blog/725104

    展开全文
  • SpringBoot2.2.6整合MyBatis3.5.4,利用JWT技术实现前后端分离 数据库采用的是MySQL
  • 今天小编就为大家分享一篇django与vue的完美结合_实现前后端的分离开发之后在整合的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 前后端分离及整合

    2021-09-17 16:04:33
    ... 但是前端看不懂JSP代码,往往造成效率低的情况。 后来就有了前后端分离的概念 前后端开发人员提前约定好接口文档(参数、数据类型),然后并行开发,...前后端整合 整合的思路有两种: 一:把前端的资源打包放入到spr

    在传统的 Java Web 开发模式中,前端写好HTML。

    接着,后端在 前端写好的HTML中**“嵌入”**JSP代码,如果后端在开发的过程中遇到页面显示上的问题,就会去找前端询问。

    但是前端看不懂JSP代码,往往造成效率低的情况。

    后来就有了前后端分离的概念

    前后端开发人员提前约定好接口文档(参数、数据类型),然后并行开发,最后完成前后端集成。

    前端 HTML 页面通过 Ajax 调用后端API(方法函数) 进行数据交互,提高开发效率。

    在这里插入图片描述

    前后端整合

    整合的思路有两种:

    一:把前端的资源打包放入到springboot项目中,打成jar包或者war包进行部署。

    二:把前端资源放到Nginx代理服务器上,后端项目文件打成jar包或者war包启动。

    具体采用哪种方式,看公司中已有的部署方式,在者就是根据自己的喜好进行整合部署。

    项目案例(应该是方式一)

    分别创建 Spring Boot 工程和 Vue 工程

    Spring Boot 工程

    在这里插入图片描述

    Vue 工程

    在这里插入图片描述

    分别启动两个应用,用命令 npm run serve启动 Vue 应用,成功之后如下图所示。
    在这里插入图片描述

    通过 http://localhost:8080/ 即可访问 Vue 应用,启动 Spring Boot 应用,成功之后如下图所示。
    在这里插入图片描述

    通过 http://localhost:8181/ 即可访问 Spring Boot 应用,比如用 Postman 访问它的数据接口。

    在这里插入图片描述

    后端服务接口调通,成功返回 JSON 数据,现在只需要让 Vue 应用调用后端接口即可,这里我们使用 axios 来请求后端接口,代码如下所示。

    const _this = this
    axios.get('http://localhost:8181/book/findByPage/1').then(function (resp) {
        _this.pageSize = resp.data.pageSize
        _this.total = resp.data.total
        _this.tableData = resp.data.data
    })
    

    请求成功后将数据动态加载到页面,即可看到结果,如下图所示。
    在这里插入图片描述
    原文链接:https://cloud.tencent.com/developer/article/1520380
    原文链接:https://blog.csdn.net/yaoyaowudi123/article/details/84974954

    展开全文
  • 主要介绍了ssm+vue前后端分离框架整合实现(附源码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本课程从0到1实现一个基于SpringBoot+Jpa+JWT+Spring Security+Vue+ElementUI整合前后端分离权限后台管理系统,数据库采用的是:mysql5.7,本项目主要功能模块有:用户管理、角色管理、菜单管理、部门管理、岗位管理...
  • 这个项目是前后端端分离项目,本课程第一季主要是实现后端功能,不包含前端项目,主要实现功能有,菜单管理,部门管理,角色管理,用户管理。日志管理,权限分配等。 菜单权限管理模块如图所示: 角色管理模块如图所...
  • springboot+Vue前后端分离项目配置整合

    千次阅读 2022-02-11 16:30:37
    springboot+vue前后端分离项目配置整合(超详细!保姆级教学!)

    一、所需环境

    JDK一般常用1.8
    在这里插入图片描述

    二、Vue

    在idea终端或者cmd窗口中创建vue
    下面使用idea终端方式
    在这里插入图片描述

    1、创建Vue项目

    使用命令 vue craete 项目名
    在这里插入图片描述
    选择最后一个
    在这里插入图片描述
    根据自己的需要来就行(空格 来控制选择与否)
    在这里插入图片描述
    选择2.x
    在这里插入图片描述
    在这里插入图片描述
    创建成功之后会出现Vue目录
    在这里插入图片描述

    2、使用element组件

    首先进入项目中
    cd 项目名
    在这里插入图片描述
    安装
    npm i element-ui -S
    在这里插入图片描述
    之后会出现两个文件
    在这里插入图片描述
    打开package.json
    在这里插入图片描述
    有这个说明安装成功

    在vue中引用
    在main.js中引入下面两个文件

    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    

    在这里插入图片描述

    Vue.use(ElementUI);

    并在下面使用
    在这里插入图片描述

    3、封装axios请求

    在src文件下新建utils中
    引入request.js文件

    import axios from 'axios'
    
    const request = axios.create({
        baseURL: '/api',  // 注意!! 这里是全局统一加上了 '/api' 前缀,也就是说所有接口都会加上'/api'前缀在,页面里面写接口的时候就不要加 '/api'了,否则会出现2个'/api',类似 '/api/api/user'这样的报错,切记!!!
        timeout: 5000
    })
    
    // request 拦截器
    // 可以自请求发送前对请求做一些处理
    // 比如统一加token,对请求参数统一加密
    request.interceptors.request.use(config => {
        config.headers['Content-Type'] = 'application/json;charset=utf-8';
    
        // config.headers['token'] = user.token;  // 设置请求头
        return config
    }, error => {
        return Promise.reject(error)
    });
    
    // response 拦截器
    // 可以在接口响应后统一处理结果
    request.interceptors.response.use(
        response => {
            let res = response.data;
            // 如果是返回的文件
            if (response.config.responseType === 'blob') {
                return res
            }
            // 兼容服务端返回的字符串数据
            if (typeof res === 'string') {
                res = res ? JSON.parse(res) : res
            }
            return res;
        },
        error => {
            console.log('err' + error) // for debug
            return Promise.reject(error)
        }
    )
    
    
    export default request
    

    在main.js中使用
    Vue.prototype.request = request

    在Home.vue中测试

    <script>
    
    
    export default {
      name: 'Home',
      components: {},
      methods: {
        load() {
            this.request.get("http://localhost:8090/test/demo").then(res=>{
                console.log(res);
            })
        }
      },
      created() {
        this.load();
      }
    }
    </script>
    

    4、运行vue项目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    或者在终端启动 npm run serve

    在这里插入图片描述
    在这里插入图片描述

    三、springboot

    1、使用spring Initializr创建boot项目

    在这里插入图片描述

    2、引入mp和druid依赖

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.8</version>
    </dependency>
    

    3、application.yml文件

    注意端口号设置为 8090 为了防止与vue的端口发生冲突

    spring:
      datasource:
        # 使用德鲁伊数据库连接池
        druid:
          # 四要素
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
          username: root
          password: 123456
          # 初始化连接数
          initialSize: 5
          # 最小空闲连接数
          minIdle: 5
          # 最大连接数
          maxActive: 20
          # 最大等待连接时间
          maxWait: 60000
    server:
      port: 8090
    mybatis-plus:
      configuration:
        # 开启驼峰命名规则 a_b转aB
        map-underscore-to-camel-case: false
        # 打印日志
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      global-config:
        db-config:
          # 全局默认主键类型:自动增长(与数据库关联)
          id-type: auto
          # 表名前缀(所有表名一般前面都相同)
          tablePrefix: mae_
          # 默认删除字段属性名
          logicDeleteField: delField
          # 逻辑已删除值
          logic-delete-value: 1
          # 逻辑未删除值
          logic-not-delete-value: 0
      # mapper.xml文件路径
      mapper-locations: classpath*:/mapper/**/*.xml
    

    4、准备controller

    package com.atmae.springboot.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Author: Mae
     * @Date: 2022/2/11
     * @Time: 17:14
     * @Description:
     */
    @Slf4j
    @RestController
    @RequestMapping("/test")
    public class DemoController {
    
        @GetMapping("/demo")
        public String test(){
            log.info("success");
            return id;
        }
    }
    

    5、启动

    四、springboot设置跨域访问

    package com.atmae.springboot.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    
    /**
     * @Author: Mae
     * @Date: 2022/2/11
     * @Time: 15:14
     * @Description:
     */
    @Configuration
    public class CorsConfig {
    
        /** 当前跨域请求最大有效时长。这里默认1天*/
        private static final long MAX_AGE = 24 * 60 * 60;
    
        @Bean
        public CorsFilter corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            // 1 设置访问源地址
            corsConfiguration.addAllowedOrigin("*");
            // 2 设置访问源请求头
            corsConfiguration.addAllowedHeader("*");
            // 3 设置访问源请求方法
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.setMaxAge(MAX_AGE);
            // 4 对接口配置跨域设置
            source.registerCorsConfiguration("/**", corsConfiguration);
            return new CorsFilter(source);
        }
    
    }
    

    五、验证

    去8080端口

    状态码200通过
    在这里插入图片描述

    展开全文
  • 前后端工程整合

    2022-02-07 22:38:19
    前后端工程整合 前端vue工程+后端springboot项目 前后端整合结果 前端访问后端接口 后端连接前端页面配置
  • 本系统基于springboot+mybatisplus+shiro+layui+redis整合开发的前后端分离权限管理系统,主要功能有: 权限管理、日志管理、角色管理、用户管理,是一个非常不错的后台管理脚手架。 项目在线预览地址:...
  • 前言 这是一篇比较适合初学者学习的教程,如果你已经掌握,可以直接...最简单直接的模式整合websocket,文章里介绍了怎么后端给前端广播推送消息,也介绍了前端之间怎么点对点互相推送消息。反响不错。 后来...
  • 主要介绍了shiro整合springboot前后端分离,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 该资源Spring、SpringMVC、Mybatis三大框架搭建的前后端分离项目,解决了前后端分离出现的跨域问题及乱码问题
  • 第一部分:部署linux + nginx 第二部分:部署Windows+tomcat 第三部分:调用第三方api的跨域问题处理。 以及常见的部署后页面显示404 的问题处理。...高效率开发,使用代码生成器可以一键生成前后端代码。)
  • SpringBoot+JWT+Vue+Axious+Vuex实现前后端分离下的身份登陆权限验证 整体思路 客户端通过用户名和密码向服务器发送请求登陆 服务器收到请求数据,在数据库进行查询验证 如果验证成功,服务器签发一个Token给客户端...
  • SM2 js 和 SM2 java前后端整合配套使用

    千次阅读 2020-03-16 16:13:15
    见附件 SM2 js.zip SM2 java.zip
  • 主要介绍了SpringBoot+Vue前后端分离实现请求api跨域问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • springboot+shiro+swagger2前后端分离整合: https://blog.csdn.net/wmlwml0000/article/details/104631552
  • ssm + maven整合前后端分离技术完整源码。
  • 之前曾在博客中提到SpringBoot整合Vue,这里进一步扩展,谈谈如何将前后端的项目部署到个人服务器中,由于个人只有阿里云服务器一台,这里的操作是前后端项目均部署至tomcat的情况,在网上自己也并未找到详细的教程...
  • 随着微服务的火爆,前后端分离成为必由之路 在微服务架构下,各个微服务是不会独立对外提供服务的 ,因为各微服务之间需要相互访问,访问是不会有权限校验的,一旦对外发布……,整个微服务集群通过Gateway(微服务之...
  • Vue整合SpringBoot框架一、新建Springboot模块二、分别运行vue和springboot 一、新建Springboot模块 (1)先在文件中找到new然后选模块 (2)选择Spring Initializr 然后这里推荐用阿里的镜像源 在Custom中填入...
  • 主要介绍了spring boot+vue 的前后端分离与合并方案实例详解,需要的朋友可以参考下
  • 最近接到一个任务,就是用django后端,前段用vue,做一个普通的简单系统,我就是一搞后端的,听到vue也是比较震惊,之前压根没接触过vue. 看了vue的一些文档,还有一些项目,先说一下django与vue的完美结合吧!...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,978
精华内容 12,791
关键字:

前后端整合

友情链接: Signali I Sistemi.zip