先後端分離做爲Web開發的一種方式,如今應用愈來愈普遍。前端通常比較流行Vue.js框架,後端框架比較多,網上有不少Vue+SpringMVC先後端分離的demo,可是Vue+JFinal框架貌似沒有搜到,本文基於Vue.js和JFinal框架,給出了搭建了一個先後端分離項目的簡單例子。前端
第一步:maven搭建後端JFinal部分vue
一、用maven新建web項目,項目名vue-jfinaljava
二、添加JFinal框架和jetty容器等依賴webpack
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>3.3</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jetty-server</artifactId> <version>8.1.8</version> <scope>provided</scope> </dependency>
三、修改web.xmlgit
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>common.demoConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
四、在src/main/java中新建controller的Package添加demoController.javagithub
package controller; import com.jfinal.core.Controller; public class demoController extends Controller { public void index() { //跨域請求設置 getResponse().addHeader("Access-Control-Allow-Origin", "*"); renderJson("{\"age\":25,\"name\":\"huiliuyi\"}"); } }
五、在src/main/java中新建common的Package添加demoConfig.javaweb
package common; import com.jfinal.config.Constants; import com.jfinal.config.Handlers; import com.jfinal.config.Interceptors; import com.jfinal.config.JFinalConfig; import com.jfinal.config.Plugins; import com.jfinal.config.Routes; import com.jfinal.core.JFinal; import com.jfinal.template.Engine; import controller.demoController; public class demoConfig extends JFinalConfig { @Override public void configConstant(Constants arg0) { arg0.setDevMode(true); } @Override public void configEngine(Engine arg0) { // TODO Auto-generated method stub } @Override public void configHandler(Handlers arg0) { // TODO Auto-generated method stub } @Override public void configInterceptor(Interceptors arg0) { // TODO Auto-generated method stub } @Override public void configPlugin(Plugins arg0) { // TODO Auto-generated method stub } @Override public void configRoute(Routes arg0) { arg0.add("/demo", demoController.class); } public static void main(String[] args) { JFinal.start("src/main/webapp", 8081, "/", 5); } }
六、運行demoConfig.java文件,run as Java Applicaiton,以下圖,則後端搭建完畢vue-cli
在Eclipse Version: Oxygen.1 Release (4.7.1)中項目目錄以下:npm
第二步:使用vue-cli搭建vue.js前端部分後端
一、安裝vue-cli
npm install --global vue-cli
二、建立一個基於webpack模板的項目
vue init webpack vue-jfinal
接下來會有一些yes/no的選項,按下圖設置
三、進入項目目錄,安裝vue-resource插件
cd vue-jfinal
npm install vue-resource
四、使用webstorm打開vue-jfinal,項目目錄以下圖,並設置Run/Debug Configuration
四、在main.js中添加vue-resource的引用
原文件
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
添加後:
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' import VueResource from 'vue-resource' Vue.use(VueResource) Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })
五、修改vue-jfinal項目中App.vue文件
原文件
<template> <div id="app"> <img src="./assets/logo.png"> <router-view/> </div> </template> <script> export default { name: 'App' } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
修改後:
<template> <div id="app"> <img src="./assets/logo.png"> <h1>服務端數據爲:{{serverData}}</h1> <button v-on:click="getdata()">得到服務器端數據</button> <router-view/> </div> </template> <script> export default { name: 'App', data(){ return { serverData:"頁面數據" } }, methods:{ getdata(){ this.$http.get('http://localhost:8081/demo').then(function(response){ this.serverData=response.data }) } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
第三步:測試先後端分離
一、在webstorm中點擊run按鈕,瀏覽器中輸入http://localhost:8080訪問,出現下面界面則前端搭建成功
二、點擊 得到後端數據按鈕,出現下圖則表示得到後端數據成功
第四步:將jfinal項目和vue項目放在同一個項目目錄下,目錄截圖
git鏈接:https://github.com/Feynman61/vue-jfinal.git
總結:
先後端分離的開發模式如今已經很是廣泛了,優勢也很明瞭,就是將先後端開發人員的工做分離開,這樣先後端開發人員就能專一於本身的工做,提升開發效率。
若是你們在實際操做中有什麼問題,歡迎你們留言評論,我會第一時間回覆你們。