Jfinal是個web框架,依賴于web.xml啟動,如下:
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="mc"version="3.0"><filter><filter-name>jfinal</filter-name><filter-class>com.jfinal.core.JFinalFilter</filter-class><init-param><param-name>configClass</param-name><param-value>com.xxx.run.ApiConfig</param-value></init-param></filter><filter-mapping><filter-name>jfinal</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>/index.html</welcome-file></welcome-file-list></web-app>
說明:
Jfinal通過過濾器Filter啟動相關配置,如上:
1、所有的請求都會被過濾器com.jfinal.core.JFinalFilter攔截;
2、JFinalFilter的init方法會由web容器啟動;
3、init方法會根據init-param中配置的類進行對象初始化,如下完整代碼會獲取param-name為configClass對應的值,即ApiConfig類,然后通過反射得到這個類的相關內容;
核心代碼塊:
publicvoidinit(FilterConfigfilterConfig)throwsServletException{createJFinalConfig(filterConfig.getInitParameter("configClass"));jfinal.init(jfinalConfig,filterConfig.getServletContext());StringcontextPath=filterConfig.getServletContext().getContextPath();contextPathLength=(contextPath==null||"/".equals(contextPath)?0:contextPath.length());constants=Config.getConstants();encoding=constants.getEncoding();jfinalConfig.afterJFinalStart();handler=jfinal.getHandler();//開始接受請求}
JFinalFilter 完整代碼如下:
packagecom.jfinal.core;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jfinal.config.Constants;importcom.jfinal.config.JFinalConfig;importcom.jfinal.handler.Handler;importcom.jfinal.log.Log;/***JFinalframeworkfilter*/publicclassJFinalFilterimplementsFilter{privateHandlerhandler;privateStringencoding;privateJFinalConfigjfinalConfig;privateConstantsconstants;privatestaticfinalJFinaljfinal=JFinal.me();privatestaticLoglog;privateintcontextPathLength;publicvoidinit(FilterConfigfilterConfig)throwsServletException{createJFinalConfig(filterConfig.getInitParameter("configClass"));jfinal.init(jfinalConfig,filterConfig.getServletContext());StringcontextPath=filterConfig.getServletContext().getContextPath();contextPathLength=(contextPath==null||"/".equals(contextPath)?0:contextPath.length());constants=Config.getConstants();encoding=constants.getEncoding();jfinalConfig.afterJFinalStart();handler=jfinal.getHandler();//開始接受請求}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;request.setCharacterEncoding(encoding);Stringtarget=request.getRequestURI();if(contextPathLength!=0){target=target.substring(contextPathLength);}boolean[]isHandled={false};try{handler.handle(target,request,response,isHandled);}catch(Exceptione){if(log.isErrorEnabled()){Stringqs=request.getQueryString();log.error(qs==null?target:target+"?"+qs,e);}}if(isHandled[0]==false){chain.doFilter(request,response);}}publicvoiddestroy(){handler=null;//停止接受請求jfinalConfig.beforeJFinalStop();jfinal.stopPlugins();}protectedvoidcreateJFinalConfig(StringconfigClass){if(configClass==null){thrownewRuntimeException("PleasesetconfigClassparameterofJFinalFilterinweb.xml");}Objecttemp=null;try{temp=Class.forName(configClass).newInstance();}catch(Exceptione){thrownewRuntimeException("Cannotcreateinstanceofclass:"+configClass,e);}if(tempinstanceofJFinalConfig){jfinalConfig=(JFinalConfig)temp;}else{thrownewRuntimeException("Cannotcreateinstanceofclass:"+configClass+".Pleasechecktheconfiginweb.xml");}}staticvoidinitLog(){log=Log.getLog(JFinalFilter.class);}}
Jfinal框架本質上就是web.xml + Lib包;
從功能上看主要分為:
1、處理用戶web請求的lib或類,如ControllerRoutes,configInterceptor,configHandler,啟動端口等;
2、普通的插件,配置等,如configPlugin,loadProp,configConstant等
如果集成不需要使用Jfinal的web相關功能,則主要根據第二點選擇即可,對于我們項目的biz,則主要為了使用Record,那么集成ActiveRecordPlugin類即可。
到此,關于“Jfinal框架的原理和用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
互聯網創業者需具備哪些素質?1、能承受高強度的信息交流一個優秀的互聯網創業者,應該把自己放在更高的交流層面,讓自己成為一個信息中轉站,但是,這份工作不是每個人都能做的,每天交流無數信息是一件很可怕的事情。創業者面對的不全是正面信息,有的是負面的,這就要求創業者有很強的抗壓能力。2、良好的溝通和表達能力在高度發達的媒體中,尤其是在媒體風起云涌的時代,優秀的溝通、表達和演講技巧可以讓創業者的項目高速傳...
(資料圖)哈嘍小伙伴們 ,今天給大家科普一個小知識。在日常生活中我們或多或少的都會接觸到奧巴馬憑什么獲得諾貝爾獎方面的一些說法,有的小伙伴還不是很了解,今天就給大家詳細的介紹一下關于奧巴馬憑什么獲得諾貝爾獎的相關內容。美國總統奧巴馬摘得2009年諾貝爾和平獎,因其致力和平工作,為世界帶來“對美好未來的希望”,以及他在呼吁減少全球核武器上的努力。挪威諾貝爾委員會對他在加強國際外交和世界人民之間的合作...
什么是農業銀行惠農卡?金穗惠農卡和金穗借記卡有什么區別?金穗惠農卡就是中國農業銀行基于金穗借記卡業務平臺開發的,面向廣大農民的綜合性銀行卡產品,惠農卡作為借記卡產品之一, 具備現金存取、轉賬結算、消費、理財等基礎金融功能,可以在線操作,實時核算。金穗惠農卡和金穗借記卡的區別一、性質不同.1、金穗惠農卡金穗惠農卡是中國農業銀行基于金穗借記卡業務平臺研發的,面向全體農戶發行的綜合性銀行卡產品。2、金穗...