一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一個(gè)實(shí)際的案例介紹Spring Boot Vue 前后端分離

 15所 2019-10-30

介紹

最近在工作中做個(gè)新項(xiàng)目,后端選用Spring Boot,前端選用Vue技術(shù)。眾所周知現(xiàn)在開發(fā)都是前后端分離,本文就將介紹一種前后端分離方式。

常規(guī)的開發(fā)方式

采用Spring Boot 開發(fā)項(xiàng)目開發(fā)項(xiàng)目常規(guī)的方式其實(shí)很簡單,無非還是采用原來Spring Mvc那一套,建控制器(Controller)然后建方法(action)再添加模板引擎(spring boot 推薦使用thymeleaf)這樣開發(fā)開起來其實(shí)也沒有大問題,畢竟是采用了MVC的思想,在一定程度上開發(fā)起來還是很方便的。但是如果在分工很細(xì)的情況下,這里前端后端是是分離開的,那么假如前端的同學(xué)需要加個(gè)頁面那么就要找后端得到同學(xué)給他加,想想一個(gè)復(fù)雜的項(xiàng)目,好多頁面,這樣開發(fā)方式肯定不是一個(gè)好的方案,如何解決這個(gè)問題呢?讓我們慢慢的一步一步的深入解答。

MVVM

什么是MVVM?其實(shí)這是一個(gè)前端概念,本人是后端開發(fā),其實(shí)對(duì)前端不是很了解,但是本人也是.Net開發(fā)人員,.Net中的WPF中其中一個(gè)核心是MVVM,最近手上一個(gè)項(xiàng)目也在用WPF,所以對(duì)MVVM還是有點(diǎn)個(gè)人的理解。從表面上理解Model-View-ViewModel那就是實(shí)體-視圖-視圖實(shí)體,好像有點(diǎn)明白,是不是實(shí)體可以到視圖,視圖也可以到實(shí)體,在想下,是不是數(shù)據(jù)可以從實(shí)體到視圖,也可以從視圖到實(shí)體,在用一個(gè)高大上的名字,那就是數(shù)據(jù)雙向綁定。是的MVVM其實(shí)就是一種數(shù)據(jù)雙向綁定的思想。

SPA(Single Page Application)

SPA翻譯成中文就是單頁面應(yīng)用,其實(shí)從名字也可以看出來,所謂的單頁面應(yīng)用,就是整個(gè)web項(xiàng)目只需要一個(gè)頁面就可以,這個(gè)怎么實(shí)現(xiàn)的呢。我想起了我之前用jquery的時(shí)候(似乎現(xiàn)在說寫jquery有點(diǎn)被鄙視,哈哈),用jquery寫過瀑布流,瀑布流的思想很簡單,就是下拉觸發(fā)一個(gè)事件,在這個(gè)事件里面請(qǐng)求一個(gè)后臺(tái)接口,然后得到結(jié)果,將結(jié)果append到頁面上。那單頁面是不是跟append效果類似??赡軆?yōu)化了性能。(前端的同學(xué)可能要噴我,本來高大上的東西,被我說的這么low)。我已知的前端的單頁面框架有:vue,AngularJS。我們使用的是vue,這個(gè)東西不管前端還是后端估計(jì)不知道的人很少了。

Spring Boot + Vue 使前后端分離

之前說過了,常規(guī)的spring mvc 開發(fā)其實(shí)也很難完全的前后端分離。前端的同學(xué)要加頁面需要找后端的同學(xué)給加。那么我們可以只建一個(gè)頁面,前端使用vue,構(gòu)建一個(gè)單頁面應(yīng)用。這樣前端可以完全不用依賴后端了,在項(xiàng)目創(chuàng)建的時(shí)候,就創(chuàng)建一個(gè)頁面,也不需要把js,css等靜態(tài)資源加到spring boot項(xiàng)目里面,把靜態(tài)資源放到靜態(tài)資源服務(wù)器上(可以放到CDN上),前端去維護(hù)靜態(tài)資源就好了。那么其實(shí)只要在我們創(chuàng)建的一個(gè)頁面上加上一個(gè)總的JS,總的CSS,再在js里面引用其他的js或者css,這樣在一個(gè)頁面上其實(shí)加的東西不多,這樣做前端對(duì)后端的依賴大大減少。那么問題來了,就是都這樣,為何不干脆不完全的把前端和后端分離開,后端連一個(gè)頁面都不用了,只提供接口。前端自己弄個(gè)服務(wù)來承載就好了。其實(shí)這樣行不行?
其實(shí)也行,但是至少需要考慮兩點(diǎn):1.單獨(dú)為前端開一個(gè)服務(wù)來承載是不是合算2.解決接口調(diào)用跨域問題(其實(shí)就是在配個(gè)nginx轉(zhuǎn)發(fā),但是增加發(fā)布配置)。其實(shí)還有可能遇到不得不用后端模板引擎來控制的情況。其實(shí)我覺得完全的前后端分離在我看來并不是一個(gè)合適的方案。所以我們?nèi)匀贿x用在后端提供一個(gè)頁面來供前端使用,前端在這個(gè)頁面上做單頁面應(yīng)用的方式。前面為什么介紹MVVM,個(gè)人觀點(diǎn)vue搭配mvvm會(huì)不會(huì)很爽(本人沒試過,但是寫wpf mvvm超級(jí)爽,所以推薦)。

Show Code

俗話說的好,別總BB,show your code。下面我開始搭建一個(gè)demo。在搭建之前先來在討論下vue,vue開發(fā)的時(shí)候需要自建一個(gè)服務(wù),來開發(fā)調(diào)試,開發(fā)完成了可以將vue打包編譯成普通的靜態(tài)資源js或者css。在正式的項(xiàng)目中將打包編譯后的靜態(tài)資源放到靜態(tài)資源服務(wù)器上或者cnd上,我們直接用打包編譯后的靜態(tài)資源就好了。這樣在開發(fā)的時(shí)候,前端需要開啟一個(gè)服務(wù)來開發(fā)和測(cè)試,那么在開發(fā)調(diào)試的時(shí)候要調(diào)用后端的接口,就會(huì)出現(xiàn)跨域情況,所以在開發(fā)過程需要解決跨域問題。這在后面會(huì)配置一個(gè)nginx用以解決跨域問題。

后端搭建

創(chuàng)建Spring boot 項(xiàng)目我就不說了。我直接搭建展示目錄。

后端目錄

直接運(yùn)行結(jié)果:

后端運(yùn)行

vue項(xiàng)目搭建

關(guān)于vue項(xiàng)目搭建我直接百度的(哈哈)。我在這裝X總結(jié)下。

  1. 安裝node.js
  2. 安裝淘寶鏡像(不然會(huì)慢的一X)
  3. 全局安裝webpack cnpm install webpack -g
  4. 全局安裝vue-cli (cnpm install -g vue-cli)
  5. (用webpack模板來創(chuàng)建一個(gè)vue項(xiàng)目)vue init webpack my-project
  6. 安裝項(xiàng)目依賴 cd my-project / cnpm install
  7. 啟動(dòng)項(xiàng)目
  8. 編譯vue為靜態(tài)文件(npm run build)

如下圖是我創(chuàng)建后的vue項(xiàng)目,已經(jīng)運(yùn)行結(jié)果。


vue項(xiàng)目目錄
運(yùn)行結(jié)果

編譯之后的文件路徑:


編譯之后的

我們看下index.html的內(nèi)容。

<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content='width=device-width,initial-scale=1'><title>front</title><link href=/static/css/app.46520b505f33694e3eee33aba78b61eb.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.3322ba91290e7480ffb3.js></script><script type=text/javascript src=/static/js/vendor.13ccb5cb8cfc8644879c.js></script><script type=text/javascript src=/static/js/app.3c073d6bceb68d30b32f.js></script></body></html>

其實(shí)就是引用js或者css文件,沒有其他的,這相當(dāng)與vue項(xiàng)目的入口,只引用一些主要的js或者的css,其他的js或者css,會(huì)在主要的js里面import(java里面叫添加包,其實(shí)應(yīng)該是類似的概念)

反正文件都是這樣的,據(jù)說可以設(shè)置。
以上相當(dāng)于一個(gè)vue的Hello World。(有學(xué)一門新語言的感覺)

在spring boot 引入靜態(tài)文件

為了演示一個(gè)靜態(tài)資源服務(wù)器,我在本機(jī)開啟一個(gè)nginx,來承載靜態(tài)資源。
對(duì)nginx進(jìn)行了簡單的配置,直接將根目錄指向vue生成的目錄

server {        listen 80;        server_name localhost;        root   D:\xxx\xxx\xxx\springboot-vue-sample\front\dist;        index  index.php index.html index.htm;        add_header Access-Control-Allow-Origin '*';        default_type 'text/html';        charset utf-8;        #rewrite_log on;    }

運(yùn)行一下看下效果:


nginx上的效果

現(xiàn)在在后端spring boot 里面引入靜態(tài)資源。上面已經(jīng)講了,index.html相當(dāng)于vue的入口,那么這個(gè)入口文件的代碼直接拷貝到后臺(tái)spring boot 里面提供的一個(gè)頁面其實(shí)就能把后臺(tái)的這個(gè)頁面當(dāng)成vue的啟動(dòng)文件。改造后的后臺(tái)頁面如下:


后臺(tái)頁面改造

改造完成點(diǎn)擊運(yùn)行,運(yùn)行結(jié)果為:

改造運(yùn)行結(jié)果

源代碼:https://github.com/applenele/springboot-vue-sample

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品丝袜一二三区| 少妇成人精品一区二区| 日韩一区二区三区久久| 亚洲第一区二区三区女厕偷拍| 欧美成人免费视频午夜色| 午夜视频成人在线免费| 日韩欧美一区二区不卡视频| 免费一级欧美大片免费看| 国产日韩欧美一区二区| 日韩性生活视频免费在线观看| 精品欧美一区二区三久久| 99久久精品午夜一区| 日韩在线一区中文字幕| 少妇成人精品一区二区| 国产av精品一区二区| 免费一区二区三区少妇| 在线视频免费看你懂的| 丰满少妇高潮一区二区| 精品人妻一区二区三区免费| 尤物天堂av一区二区| 国产日韩中文视频一区| 国产精品成人一区二区在线| 色丁香一区二区黑人巨大| 日韩中文字幕欧美亚洲| 好吊色免费在线观看视频| 九九热精品视频在线观看| 99久久国产精品免费| 热情的邻居在线中文字幕| 精品人妻一区二区三区免费看| 日韩国产亚洲欧美另类| 成人精品一区二区三区在线| 亚洲熟女少妇精品一区二区三区| 成人精品一区二区三区综合| 日韩人妻av中文字幕| 亚洲av秘片一区二区三区| 富婆又大又白又丰满又紧又硬| 视频在线观看色一区二区| 少妇被粗大进猛进出处故事 | 久久亚洲国产视频三级黄| 亚洲中文在线中文字幕91| 国产午夜福利片在线观看|