JeeWeb敏捷開發(fā)平臺(敏捷開發(fā)平臺 開源)
簡介
JeeWeb是一款基于SpringBoot 2 Spring Mybatis Hibernate的敏捷開發(fā)系統(tǒng);它是一款具有代碼生成功能的智能快速開發(fā)平臺;是以Spring Framework為核心容器,Spring MVC為模型視圖控制器,Hibernate為數(shù)據(jù)訪問層, Apache Shiro為權(quán)限授權(quán)層,Ehcahe對常用數(shù)據(jù)進行緩存,Disruptor作為并發(fā)框架,Bootstrap作為前端框架的優(yōu)秀 開源 系統(tǒng)。
JeeWeb是一款 全開源開發(fā)平臺 ,特別 代碼生成器模塊也采用開源模式 ,各位開發(fā)者可以根據(jù)自己的需要改造出更加適合自己的代碼生成器,不管是做項目、學習、接私活它都將是你的最佳拍檔;
JeeWeb主要定位于企業(yè)快速開發(fā)平臺建設(shè),已內(nèi)置很多優(yōu)秀的基礎(chǔ)功能和高效的 代碼生成 工具,包括:系統(tǒng)權(quán)限組件、數(shù)據(jù)權(quán)限組件、數(shù)據(jù)字典組件、核心工具組件、視圖操作組件、代碼生成、 UI模版標簽 庫等。前端界面風格采用了結(jié)構(gòu)簡單、性能優(yōu)良、頁面美觀大氣的Twitter Bootstrap頁面展示框架。采用分層設(shè)計、提交數(shù)據(jù)安全編碼、密碼加密、訪問驗證、數(shù)據(jù)權(quán)限驗證。使用Maven做項目管理,提高項目的易開發(fā)性、擴展性。
目前功能模塊代碼生成器、權(quán)限框架、數(shù)據(jù)字典、數(shù)據(jù)緩存、并發(fā)框架、數(shù)據(jù)監(jiān)控、計劃任務(wù)、多數(shù)據(jù)源管理、附件管理、類似mybatis動態(tài)SQL、UI模板標簽、短信發(fā)送、郵件發(fā)送、統(tǒng)計功能等功能。
JeeWeb的開發(fā)方式采用( 代碼生成器快速設(shè)計生成代碼->手工完善邏輯->豐富模板標簽快速前端開發(fā) ),可以快速協(xié)助java開發(fā)人員解決60%的重復(fù)工作,讓開發(fā)人員更多關(guān)注業(yè)務(wù)邏輯的實現(xiàn),框架使用前端模板標簽,解放JAVA開發(fā)人員的開發(fā)壓力,提高開發(fā)效率,為企業(yè)節(jié)省項目研發(fā)成本,減少開發(fā)周期。
后臺框架演示(支持兩種前端樣式自由切換)
論壇演示
前后端分離演示
JeeWeb 技術(shù)特點
JeeWeb使用目前流程的WEB開發(fā)架構(gòu)技術(shù),如 SpringBoot,Mybatis, Hibernate,Apache Shiro, Disruptor , ehcache, Jquery ,BootStrap等等,支持多種數(shù)據(jù)庫Mysql, Oracle, sqlserver等。 分層設(shè)計:使用分層設(shè)計,分為dao,service,Controller,view層,層次清楚,低耦合,高內(nèi)聚。
安全考慮:嚴格遵循了web安全的規(guī)范,前后臺雙重驗證,參數(shù)編碼傳輸,密碼md5加密存儲,shiro權(quán)限驗證,從根本上避免了SQL注入,XSS攻擊,CSRF攻擊等常見的web攻擊手段。
JeeWeb 功能特點
- SpringBoot Spring Mybatis Hibernate Shiro Ehcache Disruptor Jquery Boostrap Ztree等基礎(chǔ)前后端架構(gòu)架構(gòu)
- 采用面向聲明的開發(fā)模式, 基于泛型編寫極少代碼即可實現(xiàn)復(fù)雜的數(shù)據(jù)展示、數(shù)據(jù)編輯、表單處理等功能,在不使用代碼生成器的情況下,也只需要很少的代碼就能實現(xiàn)基礎(chǔ)的CURD操作,再配合在線開發(fā)與代碼生成器的使用,更加加快了開發(fā)的進度,將J2EE的開發(fā)效率成本提高,可以將代碼減少60%以上。
- 在線開發(fā)(通過在線配置實現(xiàn)一個表模型的增刪改查功能,無需一行代碼,支持用戶自定義表單布局)
- 代碼生成器,支持多種數(shù)據(jù)模型,根據(jù)表生成對應(yīng)的Entity,Service,Dao,Controller,JSP等,增刪改查功能生成直接使用
- UI標簽開發(fā)庫,針對前端UI進行標準封裝表,頁面統(tǒng)一采用UI標簽實現(xiàn)功能:數(shù)據(jù)datagrid,treegrid,FileInput,Editor,GridSelect等,實現(xiàn)JSP頁面零JS,開發(fā)維護簡潔高效
- 查詢過濾器:只需前端配置,后臺動態(tài)拼SQL追加查詢條件;支持多種匹配方式(全匹配/模糊查詢/包含查詢/不匹配查詢)
- 移動平臺支持,對Bootstrap(兼容Html5)進行標準封裝
- 靈活的權(quán)限控制,可控制到頁面或按鈕,滿足絕大部分的權(quán)限需求,優(yōu)化權(quán)限注解方便權(quán)限配置
- 完善的XSS防范及腳本過濾,徹底杜絕XSS攻擊
- 支持分布式部署,session存儲在redis中
- 友好的代碼結(jié)構(gòu)及注釋,便于閱讀及二次開發(fā)
- 引入quartz定時任務(wù),可動態(tài)完成任務(wù)的添加、修改、刪除、暫停、恢復(fù)及日志查看等功能
- 引入swagger文檔支持,方便編寫API接口文檔
- 國際化(支持多語言,國際化的封裝為多語言做了便捷支持)
- 多數(shù)據(jù)源(在線配置數(shù)據(jù)源,數(shù)據(jù)源工作類封裝)
- 數(shù)據(jù)權(quán)限:整合Shiro權(quán)限
- 計劃任務(wù)控制(在線配置計劃任務(wù)、方便計劃任務(wù)的時間調(diào)整規(guī)劃)
- 郵件發(fā)送(配置郵件模版、郵件帳號的在線配置、郵件異步發(fā)送、郵件發(fā)送日志功能統(tǒng)計)
- 短信發(fā)送(配置短信模版、短信帳號的在線配置、短信異步發(fā)送、短信發(fā)送日志功能統(tǒng)計、支持短信發(fā)送平臺動態(tài)切換)
- 多種首頁風格切換,支持自定義首頁風格。(Inspinia風格|ACE風格)
- 數(shù)據(jù)統(tǒng)計報表:豐富的報表統(tǒng)計功能
- 支持多種瀏覽器: Google, 火狐, IE,360 等
- 支持數(shù)據(jù)庫: Mysql,Oracle10g,SqlServer等
- 基礎(chǔ)權(quán)限: 用戶,角色,菜單權(quán)限
- Web容器測試通過的有Jetty和Tomcat,Weblogic
- 要求JDK1.8
技術(shù)選型
1、后端
- 核心框架:Spring boot2.0、Spring Framework
- 安全框架:Apache Shiro
- 服務(wù)端驗證:Hibernate Validator
- 模板標簽:Beetl
- 任務(wù)調(diào)度:Quartz
- 持久層框架:Hibernate
- 數(shù)據(jù)庫連接池:Alibaba Druid
- 緩存框架:Redis、Ehcache
- 并發(fā)框架:Disruptor
- 日志管理:SLF4J、Log4j
- 工具類:Apache Commons、Jackson、Xstream、
2、前端
- JS框架:jQuery。
- CSS框架:Twitter Bootstrap
- 客戶端驗證:Validform。
- 富文本在線編輯:markdown、simditor、Summernote、CodeMirror自由切換
- 文件上傳工具:Bootstrap fileinput
- 數(shù)據(jù)表格:jqGrid
- 對話框:layer
- 樹結(jié)構(gòu)控件:jQuery zTree
- 日期控件: datepicker
- 代碼高亮: syntaxhighlighter
簡單使用說明
- 導入jeeweb目錄下的,具體模塊sql/mysql.sql文件到mysql數(shù)據(jù)庫
- 導入項目到Idea,(項目目前使用分模塊開發(fā),我們建議是用IDEA開發(fā)).
- 修改數(shù)據(jù)庫配置文件application.yml中的賬號密碼.
- 啟動項目,管理員賬號admin/密碼123456
平臺目錄結(jié)構(gòu)說明
jeeweb├─jeeweb-common 公共模塊│ ├─jeeweb-common-base 公用基礎(chǔ)模塊│ │ │ ├─jeeweb-common-email 郵件基礎(chǔ)模塊│ │ │ ├─jeeweb-common-hibernatemvc hibernate公用模塊│ │ │ ├─jeeweb-common-mybatismvc mybatis公用模塊│ │ │ ├─jeeweb-common-oss 數(shù)據(jù)存儲公用模塊│ │ │ ├─jeeweb-common-quartz quartz公用模塊│ │ │ ├─jeeweb-common-query 查詢封裝模塊│ │ │ ├─jeeweb-common-security 安全公用模塊│ │ │ ├─jeeweb-common-sms 短信公用模塊│ │ │ └─jeeweb-common-utils 公用工具模塊│ ├─jeeweb-ui UI模塊│ ├─jeeweb-beetl-tag 基于beetl的類似spring form的模板標簽│ │ │ ├─jeeweb-ui-static 公用靜態(tài)資源模塊│ │ │ └─jeeweb-ui-tag 基于靜態(tài)資源模塊的標簽│ ├─jeeweb-web 業(yè)務(wù)模塊│ ├─jeeweb-admin 后臺案例模塊│ │ │ ├─jeeweb-bbs Jeeweb官方論壇代碼模塊│ │ │ ├─jeeweb-vue 前后端分離后端模塊│ │ │ └─jeeweb-generator 代碼生成器模塊│
代碼示例
[1].GRID列表
<#grid:grid id=”onlineGrid” datatype=”local” datas=”${onlineSessionList}” sortname=”startTimestamp” sortorder=”desc”> <#grid:column label=”sys.common.key” hidden=”true” name=”id” width=”100″/> <#grid:column label=”用戶” name=”username” /> <#grid:column label=”用戶主機IP” name=”host” /> <#grid:column label=”系統(tǒng)主機IP” name=”systemHost” /> <#grid:column label=”登錄時間” name=”startTimestamp” width=”140″ queryMode=”date” condition=”between” /> <#grid:column label=”最后訪問時間” name=”lastAccessTime” width=”140″/> <#grid:column label=”狀態(tài)” name=”status” dict=”onlinestatus” /> <#grid:column label=”User-Agent” name=”userAgent” /> <#grid:column label=”用戶會話ID” name=”id” /> <#grid:toolbar title=”強制退出” btnclass=”btn-danger” icon=”fa-trash-o” function=”toolbarSelectConfirm” url=”${adminPath}/sys/online/forceLogout” tipMsg=”您確定要強制退出這些信息么,請謹慎操作!”/></#grid:grid>
[2].TREEGRID列表
<#grid:grid id=”organizationGrid” async=”true” treeGrid=”true” expandColumn=”name” url=”${adminPath}/sys/organization/ajaxTreeList”> <#grid:column label=”sys.common.key” hidden=”true” name=”id” width=”100″/> <#grid:column label=”sys.organization.name” name=”name” query=”true” condition=”like” /> <#grid:column label=”sys.organization.remarks” name=”remarks” /> <#grid:column label=”sys.common.opt” name=”opt” formatter=”button” width=”100″/> <#grid:button groupname=”opt” function=”delete” /> <#grid:toolbar function=”add”/> <#grid:toolbar function=”update”/> <#grid:toolbar function=”delete”/> <#grid:toolbar function=”search”/> <#grid:toolbar function=”reset”/></#grid:grid>
[3].表單代碼
<% layout(‘/layouts/form.html’, {title: @MessageUtils.getMessage(‘sys.user.updateuser’,”), formId: ‘userForm’, bodyClass: ‘white-bg’, libs: ‘bootstrap-fileinput’}){ %><#form:form id=”userForm” modelAttribute=”data” method=”post” class=”form-horizontal”> <#form:hidden path=”id” /> <table class=”table table-bordered table-condensed dataTables-example dataTable no-footer”> <tbody> <tr> <td class=”width-15 active text-right”> <label>用戶名:</label></td> <td class=”width-35″>${data.username}</td> <td class=”width-15 active text-right”> <label> <font color=”red”>*</font>姓名:</label></td> <td class=”width-35″> <#form:input path=”realname” class=”form-control ” datatype=”*” nullmsg=”請輸入姓名!” htmlEscape=”false” /> <label class=”Validform_checktip”></label> </td> </tr> <tr> <td class=”width-15 active text-right”> <label> <font color=”red”>*</font>郵箱:</label></td> <td class=”width-35″> <#form:input path=”email” class=”form-control” datatype=”e” nullmsg=”請輸入姓名!” htmlEscape=”false” /> <label class=”Validform_checktip”></label> </td> <td class=”width-15 active text-right”> <label> <font color=”red”>*</font>聯(lián)系電話:</label></td> <td class=”width-35″> <#form:input path=”phone” class=”form-control” htmlEscape=”false” datatype=”m” nullmsg=”請輸入用戶名!” /> <label class=”Validform_checktip”></label> </td> </tr> <tr> <td class=”active”> <label class=”pull-right”> <font color=”red”>*</font>用戶角色:</label></td> <td colspan=”3″> <#form:checkboxes path=”roleIdList” nested=”false” items=”${allRoles}” defaultValue=”${roleIdList}” itemLabel=”name” itemValue=”id” htmlEscape=”false” cssClass=”i-checks required” /></td> </tr> <tr> <td class=”width-15 active”> <label class=”pull-right”>組織機構(gòu):</label></td> <td colspan=”3″> <#form:treeselect title=”請選擇組織機構(gòu)” path=”organizationIds” nested=”false” dataUrl=”${adminPath}/sys/organization/treeData” chkboxType=”” labelName=”parentname” labelValue=”${organizationNames}” multiselect=”true” /></td> </tr> </tbody> </table></#form:form><% } %>
git地址:https://gitee.com/dataact/jeeweb