前端的MVC框架和後端的SSH框架怎麼結合?

前端框架用的是backbone.js,後端用的是struts,hibernate,spring,具體怎麼結合,能否給我一個思路?

還有一個沒想明白就是頁面跳轉是放在前端還是放在後端


這兩個東西本身八杆子打不著,取決於你的產品形態是 Single Page Application 還是普通的 Web Page,所以 route 是在前端還是在後端是個產品問題而不是技術問題,當然在前端做能提供更好的體驗,但複雜度就會高一些。

但無論怎麼選,都建議將數據完全從業務中解耦出去,通過 RESTful API 同前端通信,如果頁面渲染在 server 端進行,那就在把 server 分拆成 route + render 和 data source 兩部分,二者之間依然是通過 RESTful API 進行通信從而實現低耦合。如果是在 browser 渲染頁面,那就是典型的 SPA 架構啦,網上有很多架構圖的。


對於互聯網或者小型工具型應用

用 jsp 當 template,載入 header footer 什麼的。

那些 js 的 template 渲染局部。

具體來說就是

struts 里基本上 action 要分成兩大塊,page action 和 ajax action

打開頁面還是要走某個 action 的。

page action 返回很簡單的東西,基本上就是不包含 data 的頁面,只有 html 框架 和 css 以及一些 common js。

page action 要載入/生成一段 js,通過這段 js 請求 ajax action 獲得 data。

獲得 data 通過 handlebar 這類模板來呈現數據。

問題在於 seo,如果你要做 seo,這套就不行,所以你要生成靜態頁面來餵給 seo。

然後你說的路由,所謂得頁面跳轉。page action,返回就是一個 jsp 頁面,不推薦做 redirect。

當然了,在某些場景下,不得不用來做伺服器重定向。

一般來說,頁面流轉都是 js 觸發,比如,我點了個「加入購物車」 然後一個 ajax request 出去了,返回一個 result,如果 result success 了,然後要麼 refresh 當前頁面,要麼跳轉新頁面。這套邏輯一般在 js 里 處理,最好寫一個狀態機來做。

如果你不是做大型 erp 的話,那這套足夠了。

然後你如果要做大型 erp。

我實踐結果是,就一個 jsp,只有 html 框架,什麼 頁頭頁腳。中間全不拿 js 渲染。通過 url 參數來指定頁面。

就是只有一個 page action,剩下全部都是 ajax action。

這時候,你需要好好寫你的載入器。頁面路由還是自己寫吧,現有都不太好用。

erp 不用 seo,讓搜索引擎見鬼去吧。

所以你要做兩塊驗證,page action 和 ajax action。兩塊驗證都不要漏掉。

差不多就是這個意思。

對了,別用 spring 來注入 action,用起來難受死了。

另外,上面說不結合的,一定沒有好好做過沒有好好想過。

當然了,肯定有人來噴我,告訴我說,ssh 已經是過時的技術,各種坑,java 就是爛。

事先回復一下:麻痹的你連 JVM 是什麼都不知道就跟風地黑,怪不得只能寫寫 CSS。


你還沒有搞清楚前端路由和服務端路由的區別:

服務端路由:每跳轉到不同的URL,都是重新訪問服務端,然後服務端返回頁面,頁面也可以是服務端獲取數據,然後和模板組合,返回HTML,也可以是直接返回模板HTML,然後由前端JS再去請求數據,使用前端模板和數據進行組合,生成想要的HTML。

前端路由:每跳轉到不同的URL都是使用前端的錨點路由,實際上只是JS根據URL來操作DOM元素,根據每個頁面需要的去服務端請求數據,返回數據後和模板進行組合,當然模板有可能是請求服務端返回的,這就是 @趙望野 說的 SPA 單頁程序,不知道你有沒有徹底的明白了?如果理解了區別,怎麼做應該就清楚了。

建議你放在前端,因為你已經使用了backbone,否則backbone就完全沒有任何利用價值了,這樣你的服務端就可以完全只提供RESTfull的API數據。backbone框架貌似提供了路由的模塊:Backbone入門指南(七):Router和History (路由控制器) ,但是沒有自己的模板引擎,你需要選擇一個前端的模板引擎來配合 backbone。


推薦閱讀:

為什麼Bootstrap不設計得像Semantic UI那樣簡潔易懂?
有一 li 元素其中有中文和英文,怎麼分別設置他們的字體樣式呢?
怎麼樣提高你網站的登錄體驗?
如何進行前端自動化測試?

TAG:前端開發 | JavaScript | MVC | Backbonejs |