
JessMA 是功能完備的高性能Full-StackWeb應(yīng)用開(kāi)發(fā)框架,內(nèi)置可擴(kuò)展的MVCWeb基礎(chǔ)架構(gòu)和DAO數(shù)據(jù)庫(kù)訪問(wèn)組件(內(nèi)部已提供了Hibernate、MyBatis與JDBCDAO組件),集成了Action攔截、Form/Dao/SPRingBean裝配、國(guó)際化、文件上傳下載和頁(yè)面靜態(tài)化等基礎(chǔ)Web應(yīng)用組件,提供高效靈活的純jsp/ServletAPI編程模型,可完美整合Spring/Guice,支持ActionConvention,能快速開(kāi)發(fā)傳統(tǒng)風(fēng)格和RESTful風(fēng)格應(yīng)用程序,文檔和示例完善,非常容易學(xué)習(xí)。 JessMA官方網(wǎng)站:http://www.jessma.org OSChina 項(xiàng)目主頁(yè):http://www.oschina.net/p/portal-basic Github 下載地址:https://github.com/ldcsaa/JessMA 在線示例:http://demo.jessma.org 在線 API 文檔:http://www.jessma.org/doc
JessMA在設(shè)計(jì)之初就充分注重功能、性能與使用體驗(yàn)。JessMA主要特點(diǎn):
★功能全面:內(nèi)置穩(wěn)定高效的MVC基礎(chǔ)架構(gòu)和DAO框架,支持Action攔截、FormBean/DaoBean/SpringBean裝配和聲明式事務(wù),提供國(guó)際化、文件上傳下載、緩存和頁(yè)面靜態(tài)化等常用Web組件,能滿足絕大部分Web應(yīng)用的需要。★高度擴(kuò)展:JessMA通過(guò)的plug-in機(jī)制可以靈活擴(kuò)展,JessMA發(fā)布包中自帶的jessma-ext-rest和jessma-ext-spring均以插件的形式提供,用戶可根據(jù)需要加載或卸載這些插件。應(yīng)用程序開(kāi)發(fā)者也可以根據(jù)實(shí)際需要編寫自定義插件來(lái)擴(kuò)展JessMA。★強(qiáng)大的整合能力:JessMA是一個(gè)Full-Stack框架,同時(shí)也是一個(gè)開(kāi)放式框架,可以以非常簡(jiǎn)單的方式整合第三方組件。本開(kāi)發(fā)手冊(cè)會(huì)詳細(xì)闡述如何在JessMA中整合Freemarker、Velocity、Urlrewrite、EHCache-Web、Spring、Hibernate和Mybaits等常用框架和組件。★高性能:性能要求是JessMA的硬性指標(biāo),從每個(gè)模塊的設(shè)計(jì)到每行代碼的實(shí)現(xiàn)都力求簡(jiǎn)潔高效。另外,Portal-Basic并沒(méi)有對(duì)JSP/ServetAPI進(jìn)行過(guò)多封裝,開(kāi)發(fā)者仍然使用JSP/ServetAPI開(kāi)發(fā)應(yīng)用程序,沒(méi)有過(guò)多的迂回,性能得到保證。★優(yōu)秀的使用體驗(yàn):JessMA的設(shè)計(jì)目標(biāo)之一是提供良好的開(kāi)發(fā)體驗(yàn),盡量減少應(yīng)用程序開(kāi)發(fā)者的工作,API的設(shè)計(jì)力求簡(jiǎn)單、完整、明確。同時(shí),JessMA為應(yīng)用開(kāi)發(fā)提供了大量Util工具,用來(lái)處理應(yīng)用程序開(kāi)發(fā)過(guò)程中通常會(huì)遇到的一般性問(wèn)題,進(jìn)一步減少應(yīng)用程序開(kāi)發(fā)者的工作負(fù)擔(dān)。★平緩的學(xué)習(xí)曲線:學(xué)習(xí)使用JessMA只需掌握一定的CoreJava與JSP/Servlet知識(shí),本開(kāi)發(fā)手冊(cè)會(huì)循序漸進(jìn)闡述每個(gè)知識(shí)點(diǎn),每個(gè)知識(shí)點(diǎn)都會(huì)結(jié)合完整的示例進(jìn)行講述,知識(shí)點(diǎn)之間前后呼應(yīng),確保學(xué)習(xí)者在學(xué)習(xí)時(shí)溫故知新,融會(huì)貫通。★完善的技術(shù)支持:除了提供完善的開(kāi)發(fā)手冊(cè)和示例代碼以外,還提供博客和QQ群用于解答使用JessMA過(guò)程中碰到的所有問(wèn)題,也可以訪問(wèn)JessMA官方網(wǎng)站了解更多資訊。
*JessMA總體架構(gòu)

JessMA主要包括以下5個(gè)部分:
●基礎(chǔ)應(yīng)用框架
基礎(chǔ)應(yīng)用框架加載應(yīng)用程序配置文件(默認(rèn):app-config.xml),監(jiān)聽(tīng)?wèi)?yīng)用程序的生命周期事件,并向上層應(yīng)用發(fā)送應(yīng)用程序啟動(dòng)和關(guān)閉通知,應(yīng)用程序可以處理這些通知進(jìn)行額外的初始化或清理工作。基礎(chǔ)應(yīng)用框架在org.jessma.app包中是實(shí)現(xiàn)。
●MVC框架
MVC框架加載MVC配置文件(默認(rèn):mvc-config.xml),通過(guò)前端控制器ActionDispatcher接收和解析所有的客戶HTTP請(qǐng)求,然后交由相應(yīng)的Action進(jìn)行處理,最后生成相應(yīng)的視圖返回給客戶端。MVC框架在org.jessma.mvc包中實(shí)現(xiàn)。
●DAO框架
DAO框架封裝了所有的數(shù)據(jù)庫(kù)訪問(wèn)操作,內(nèi)置JDBC、Hibernate和MyBaits數(shù)據(jù)庫(kù)訪問(wèn)組件以及Druid、Proxool、JNDI等連接池。DAO框架是可擴(kuò)展的,用戶可以通過(guò)擴(kuò)展org.jessma.dao.AbstractFacade和org.jessma.dao.AbstractsessionMgr實(shí)現(xiàn)自己的數(shù)據(jù)庫(kù)訪問(wèn)組件。DAO框架在以下包中實(shí)現(xiàn): ?org.jessma.dao ?org.jessma.dao.hbn ?org.jessma.dao.jdbc ?org.jessma.dao.mybatis
●公共組件
公共組件提供多種通用功能幫助類(如:字符串處理、類型轉(zhuǎn)換、分頁(yè)算法、壓縮/解壓、加解密、郵件發(fā)送等),這些類與框架無(wú)關(guān),可在任何應(yīng)用程序中使用。公共組件在以下包中實(shí)現(xiàn): ?org.jessma.util ?org.jessma.util.archive ?org.jessma.util.http ?org.jessma.util.mail
●擴(kuò)展插件
擴(kuò)展差插件是基于JessMA核心框架基礎(chǔ)上的功能延伸,不是JessMA的必要組件。可由應(yīng)用程序開(kāi)發(fā)人員根據(jù)需要自行定制。JessMA發(fā)行包中也自帶了一些擴(kuò)展插件(如:jessma-ext-spring和jessma-ext-rest)。
*JessMA應(yīng)用程序依賴關(guān)系
基礎(chǔ)應(yīng)用框架、MVC框架和DAO框架都依賴于公共組件,其中基礎(chǔ)應(yīng)用框架同時(shí)依賴于DAO框架,因此,MVC框架和DAO框架能脫離JessMA單獨(dú)使用(當(dāng)然,要附帶上公共組件)。例如:可以把MVC框架和DAO框架用于JessMA之外的其它Web項(xiàng)目;也可以把DAO框架用于非Web項(xiàng)目(如:Swing/SWT桌面應(yīng)用)。
JessMA3.5.1 更新:
1、JessMA 3.5.1 使用 Maven 進(jìn)行構(gòu)建和發(fā)布管理
1) JessMA core
<dependency><groupId>org.jessma</groupId><artifactId>jessma-core</artifactId><version>3.5.1</version></dependency>
2) JessMA RESTful 擴(kuò)展
<dependency><groupId>org.jessma</groupId><artifactId>jessma-ext-rest</artifactId><version>3.5.1</version></dependency>
3) JessMA Guice 擴(kuò)展
<dependency><groupId>org.jessma</groupId><artifactId>jessma-ext-guice</artifactId><version>3.5.1</version></dependency>
4) JessMA Spring 擴(kuò)展
<dependency><groupId>org.jessma</groupId><artifactId>jessma-ext-spring</artifactId><version>3.5.1</version></dependency>
2、日志組件使用 slf4j 替代 Log4j1) JessMA Logger 對(duì)象獲取方式:org.jessma.util.LogUtil.getJessMALogger()2)其它 Logger 對(duì)象獲取方式:org.jessma.util.LogUtil.getLogger()
3、其它更新1) 依賴包更新到最新版本 2) 增加 Maven 示例工程 jessma-sample-hello 和 jessma-sample-set 3) 更新開(kāi)發(fā)手冊(cè)《JessMA Java Web 應(yīng)用開(kāi)發(fā)框架 (v3.5.1)》
JessMA3.4.1 更新:
1、升級(jí) Log4J 到 2.x 版本1) Log4J 默認(rèn)配置文件為 log4j2.xml 2) 默認(rèn) Logger 對(duì)象獲取方式:org.jessma.util.LogUtil.getDefaultLogger(...) 3) 其它 Logger 對(duì)象獲取方式:org.apache.logging.log4j.LogManager.getLogger(...)
2、其它更新1) 依賴庫(kù) “jessma-lib” 中的所有 jar 包更新到最新版本 2) 依賴庫(kù) “spring-lib” 中的所有 jar 包更新到最新版本 3) 更新開(kāi)發(fā)手冊(cè)《JessMA Java Web 應(yīng)用開(kāi)發(fā)框架 (v3.4.1)》
JessMA3.3.1 更新:
1、增強(qiáng)國(guó)際化功能
1) 支持設(shè)置應(yīng)用程序器默認(rèn) Locale 和默認(rèn) Bundle A) 如果不配置器默認(rèn) Locale 則使用系統(tǒng)原來(lái)的默認(rèn) Locale B) 如果不配置默認(rèn) Bundle,則默認(rèn) Bundle 為 'res.application-message' (參考:下面的 MVC 配置文件條目) <!-- default-locale:應(yīng)用程序默認(rèn)語(yǔ)言選項(xiàng)(默認(rèn):與當(dāng)前操作系統(tǒng)一致) default-bundle:應(yīng)用程序默認(rèn) Bundle(默認(rèn):res.application-message) --> <i18n default-locale="en_US" default-bundle="com.bruce.res.application-message" />
2) 支持基于 URL、Cookie 或?yàn)g覽器語(yǔ)言選項(xiàng)的國(guó)際化方式 A) org.jessma.mvc.i18n.URLI18nFilter :基于 URL 請(qǐng)求參數(shù)的國(guó)際化攔截器 B) org.jessma.mvc.i18n.CookieI18nFilter :基于 Cookie 的國(guó)際化攔截器 C) org.jessma.mvc.i18n.BrowserI18nFilter:基于瀏覽器語(yǔ)言選項(xiàng)的國(guó)際化攔截器 D) JessMA 默認(rèn)基于 Session 實(shí)現(xiàn)國(guó)際化,但可以通過(guò)配置上述攔截器改為相應(yīng)的實(shí)現(xiàn)方式 E) 上述攔截器的國(guó)際化屬性是基于 Request Attribute 的,因此會(huì)屏蔽 Session 的國(guó)際化設(shè)置 F) 上述攔截器可以組合使用,一般順序?yàn)椋篣RL -> Cookie -> Browser (例如:下面同時(shí)配置了 URL、Cookie 和 Browser 三個(gè)國(guó)際化攔截器) <action-filters> <!-- 優(yōu)先檢查客戶請(qǐng)求中是否帶有名稱為 '__locale' 的請(qǐng)求參數(shù) --> <filter class="org.jessma.mvc.i18n.URLI18nFilter"/> <!-- 然后檢查請(qǐng)求是否帶有名稱為 '__locale' 的 Cookie --> <filter class="org.jessma.mvc.i18n.CookieI18nFilter"/> <!-- 最后根據(jù)客戶端瀏覽器的語(yǔ)言選項(xiàng)設(shè)置當(dāng)前請(qǐng)求的語(yǔ)言屬性 --> <filter class="org.jessma.mvc.i18n.BrowserI18nFilter"/> </action-filters>2、支持 JSR 303 Bean Validation 機(jī)制1) 如果開(kāi)啟了Bean Validation 機(jī)制,應(yīng)用程序可對(duì)由 @FormBean 注解的 Form Bean 執(zhí)行自動(dòng)驗(yàn)證 2) @FormBean 注解增加 'validate()' 和 'groups()' 兩個(gè)屬性,分別指示是否對(duì) Form Bean 執(zhí)行自動(dòng)驗(yàn)證,以及自動(dòng)驗(yàn)證的驗(yàn)證組 3) 如果自動(dòng)驗(yàn)證成功則轉(zhuǎn)入 Action 的 validate() 方法繼續(xù)執(zhí)行,否則會(huì)把錯(cuò)誤信息寫入 Action 的 errors 集合并跳轉(zhuǎn)到 Action 的 INPUT 視圖 4) 應(yīng)用程序還可以隨時(shí)調(diào)用 ActionSupport 的 validateBean() / validateBeanAndAddErrors() 方法驗(yàn)證其它任何 Bean 5) 增加錯(cuò)誤信息輸出標(biāo)簽 <p:err/>,支持多種方式和格式展示錯(cuò)誤信息(參考:<p:err/> 及其實(shí)現(xiàn)類 org.jessma.tag.Error 相關(guān)注釋) (參考:下面的 MVC 配置文件條目) <!-- enable :是否開(kāi)啟 Bean Validation 機(jī)制(默認(rèn):開(kāi)啟) bundle:驗(yàn)證文本消息的 Bundle(默認(rèn):res.validation-message) validator:驗(yàn)證器類(默認(rèn):org.jessma.mvc.validation.HibernateBeanValidator) --> <bean-validation enable="true" bundle="com.bruce.res.validation-message" validator="org.jessma.mvc.validation.HibernateBeanValidator" />3、其它更新
1) org.jessma.ext.dao.* 包中的類移到 org.jessma.dao 2) 應(yīng)用程序默認(rèn) Bundle 由 “res.message-resource” 改為 “res.application-message” 3) 修改 MVC 主/從配置文件、應(yīng)用程序配置文件以及 REST 配置文件的 Sechema 引用(參考 MyJessMA 測(cè)試工程) 4) 更新開(kāi)發(fā)手冊(cè)《JessMA Java Web 應(yīng)用開(kāi)發(fā)框架 (v3.3.1)》 5) 整理依賴庫(kù) “jessma-lib”,刪除多余的 jar 包4)事務(wù)屬性由最外層的 DAO 方法指定,忽略所有內(nèi)層 DAO 方法的事務(wù)屬性JessMA3.2.3 更新:
1、增加Guice支持
1)增加Guice插件包jessma-ext-guice-3.2.3.jar用于整合Guice 2)Action通過(guò)@GuiceBean/@GuiceBeans注解聲明GuiceBean 3)Action通過(guò)攔截器com.bruce.ext.guice.GuiceInjectFilter解析@GuiceBean/@GuiceBeans注解并注入GuiceBean 4)可以在GuiceBean中注入JessMADAO對(duì)象,從而能在Guice環(huán)境下使用JessMADAO子框架 5)示例工程MyJessMA增加Guice整合示例(注:通常情況下,應(yīng)用程序需要?jiǎng)?chuàng)建GuiceInjectFilter的子類并改寫configModules()方法,用于定義Module的綁定規(guī)則)publicclassMyGuiceInjectFilterextendsGuiceInjectFilter{@OverrideprotectedCollection<Module>configModules(){Set<Module>modules=newHashSet<Module>();//加入第一個(gè)Modulemodules.add(newModule(){@Overridepublicvoidconfigure(Binderbinder){//配置綁定規(guī)則//......}});//......//加入第N個(gè)Modulemodules.add(newModule(){@Overridepublicvoidconfigure(Binderbinder){//配置綁定規(guī)則//......}});returnmodules;}}
2、FormBean支持聯(lián)級(jí)屬性注入
1)@FormBean注解支持注入聯(lián)級(jí)屬性2)org.jessma.util.BeanHelper的createBean(...)/setPropertiesOrFieldValues(...)系列方法支持聯(lián)級(jí)裝配Bean
(例如:下面的Form對(duì)應(yīng)的Bean中,b、x和y為聯(lián)級(jí)Bean)<form><inputname="a"value="..."><inputname="b.c"value="..."><inputname="b.d"value="..."><inputname="x.y.z"value="..."></form>
JessMA3.2.2更新:
(注:本次更新的主要內(nèi)容是升級(jí)DAO組件)
1、org.jessma.dao.hbn.HibernateSessionMgr支持自動(dòng)掃描實(shí)體對(duì)象
1)實(shí)體對(duì)象用@Entity注解取代*.hbm.xml映射文件(同時(shí)也不必在hibernate.cfg.xml中配置‘mapping’)2)app-config.xml中配置HibernateSessionMgr時(shí),用第二個(gè)可選參數(shù)以正則表達(dá)式的格式指定實(shí)體對(duì)象所在包(例如:實(shí)體對(duì)象位于‘com.bruce.<任意子包>.model’中)<managername="mgr-1"class="org.jessma.dao.hbn.HibernateSessionMgr"><initialize-args><arg></arg><arg>com/.bruce/..+/.model</arg></initialize-args></manager>
2、org.jessma.dao.mybatis.MyBatisSessionMgr支持自動(dòng)掃描SQLMapper接口
1)不必在mybatis.cfg.xml中配置‘mapper’2)app-config.xml中配置MyBatisSessionMgr時(shí),用第三個(gè)可選參數(shù)以正則表達(dá)式的格式指定SQLMapper接口所在包(例如:SQLMapper接口位于‘com.bruce.<任意子包>.mapper’中)<managername="mgr-2"class="org.jessma.dao.mybatis.MyBatisSessionMgr"><initialize-args><arg></arg><arg></arg><arg>com/.bruce/..+/.mapper</arg></initialize-args></manager>
3、org.jessma.dao.FacadeProxy增加方法executeCustomTransaction(...)支持執(zhí)行自定義事務(wù)
1)JessMA的事務(wù)是DAO層事務(wù),也就是說(shuō)當(dāng)外部調(diào)用某個(gè)DAO方法時(shí),該方法作為一個(gè)事務(wù)單元執(zhí)行。但在一些特殊情形下可能需要在DAO外部執(zhí)行Service層事務(wù)(例如:事務(wù)需要調(diào)用多個(gè)DAO對(duì)象的多個(gè)方法),此時(shí)需要?jiǎng)?chuàng)建一個(gè)自定義事務(wù)(CustomTransaction),并調(diào)用FacadeProxy的executeCustomTransaction(...)來(lái)執(zhí)行該自定義事務(wù)。2)增加自定義事務(wù)相關(guān)接口:A)CustomTransaction :自定義事務(wù)基接口B)JdbcTransaction :JDBC自定義事務(wù)接口C)MyBatisTransaction :MyBatis自定義事務(wù)接口D)HibernateTransaction :Hibernate自定義事務(wù)接口(示例)publicstaticvoidserviceMethod(){//獲取SessionMgrHibernateSessionMgrmgr=(HibernateSessionMgr)AppConfig.getSessionManager("mgr-1");//執(zhí)行自定義事務(wù)FacadeProxy.executeCustomTransaction(mgr,newHibernateTransaction(){//實(shí)現(xiàn)自定義事務(wù)方法@Overridepublicvoidexecute(HibernateSessionMgrmgr)throwsDAOException{//創(chuàng)建dao1(可以使用FacadeProxy創(chuàng)建DAO對(duì)象)MyDaoAdao1=newMyDaoA(mgr);// 創(chuàng)建 dao2 (可以使用 ‘new MyDaoB(mgr)’ 創(chuàng)建 DAO 對(duì)象)MyDaoB dao2 = Facade.create(MyDaoB.class, mgr);//執(zhí)行DAO方法dao1.methodXxx();dao2.methodYyy();dao1.methodZzz();dao2.methodNnn();}});}
4、擴(kuò)大mvc-confing.xml中<result-path-aliases>別名配置應(yīng)用范圍
1)支持在<result-path-aliases>配置中引用前面定義的別名(示例:下面配置中${index}的實(shí)際路徑為'/jsp/test/index.jsp')<result-path-aliases><aliasname="jsp_base"path="/jsp/test"/><aliasname="index"path="${jsp_base}/index.jsp"/></result-path-aliases>
2)允許在<action-convention>的'dispatch-file-path'和'dispatch-file-path'配置中使用別名
(示例:下面配置中'dispatch-file-path'的實(shí)際路徑為'/jsp') <action-conventiondispatch-file-path="${ac_path}"<!--其它配置(略)...-->/><result-path-aliases><aliasname="ac_path"path="/jsp"/></result-path-aliases>
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注