JFinal 是基于 Java 語言的極速 WEB + ORM 框架,其核心設(shè)計目標是開發(fā)迅速、代碼量少、學(xué)習(xí)簡單、功能強大、輕量級、易擴展、Restful。 在擁有Java語言所有優(yōu)勢的同時再擁有ruby、python、php等動態(tài)語言的開發(fā)效率!為您節(jié)約更多時間,去陪戀人、家人和朋友 :)
JFinal有如下主要特點
MVC架構(gòu),設(shè)計精巧,使用簡單
遵循COC原則,零配置,無xml
獨創(chuàng)Db + Record模式,靈活便利
ActiveRecord支持,使數(shù)據(jù)庫開發(fā)極致快速
自動加載修改后的java文件,開發(fā)過程中無需重啟web server
AOP支持,攔截器配置靈活,功能強大
Plugin體系結(jié)構(gòu),擴展性強
多視圖支持,支持FreeMarker、JSP、Velocity
強大的Validator后端校驗功能
功能齊全,擁有struts2的絕大部分功能
體積小僅248K,且無第三方依賴
jfinal 微信使用的技術(shù)
前端使用淘寶tengine(Nginx),基于JAVA語言,采用JFinal開發(fā),數(shù)據(jù)庫采用PostgreSQL,緩存及隊列采用SSDB。
XML處理采用dom4j,JSON處理采用溫少的fastjson。http相關(guān)處理采用HttpClient庫。
經(jīng)過測試發(fā)現(xiàn)使用Nginx做前端可大幅提高響應(yīng)速度。主要原因可能是Nginx建立連接更快吧。
核心接口:
public interface Handler<T,R> { T handle(R request); }public interface RequestMessage { public void parseXml(Element root); }public interface ResponseMessage { public void toXml(Element root); }public interface EngineService extends Service{ /** * @Title : handle * @Description : 處理收到的消息字符串 * @param : @param msgText 消息字符串 * @return : String xml字符串 */ public String handle(String msgText); /** * @Title : registEventHandler * @Description : 注冊事件處理器 * @param : @param eventType 事件類型 * @param : @param handler 事件處理器 */ public void registEventHandler(EventType eventType,Handler<RequestMessage , ResponseMessage> handler); /** * @Title : registInMessageHandler * @Description : 注冊消息處理器 * @param : @param msgType 消息類型 * @param : @param handler 消息處理器 */ public void registInMessageHandler(InMsgType inMsgType, Handler<RequestMessage , ResponseMessage> handler); /** * @Title : registUnsupportedInMesssageHandler * @Description : 注冊不支持的消息/事件處理器 * @param : @param handler 處理器 */ public void registUnsupportedInMessageHandler(Handler<RequestMessage , ResponseMessage> handler); /** * @Title : registUnsupportedMesssageHandler * @Description : 注冊不支持的消息/事件處理器 * @param : @param handler 處理器 */ public void registUnsupportedEventHandler(Handler<RequestMessage , ResponseMessage> handler); }
EngineService的handle方法會偵測消息事件類型,然后構(gòu)建對應(yīng)的對象,并調(diào)用對象的parseXML方法完成對消息xml的分析,最后調(diào)用注冊的handler來處理響應(yīng)的消息或者事件。
具體業(yè)務(wù)實現(xiàn)對應(yīng)的handler,然后注冊到某個消息或者事件上就可以了。
與JFinal集成部分代碼,主要就是集成JFinal的Handler,然后把請求轉(zhuǎn)發(fā)到EngineService的handle方法上。
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { isHandled[0] = true; try { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); if (checkSignature(request)) { if (request.getMethod().equals("POST")) { // 微信發(fā)送過來的數(shù)據(jù)(用戶發(fā)起) // 接收post過來的數(shù)據(jù) String requestStr = readPostData(request); if (logger.isDebugEnabled()) { logger.debug("POST請求,轉(zhuǎn)發(fā)到威爾伯樂微信引擎處理"); logger.debug("POST請求數(shù)據(jù):" + requestStr); } String responseStr = null; if (requestStr != null) { responseStr = engineService.handle(requestStr); } if (logger.isDebugEnabled()) { logger.debug("威爾伯樂微信引擎處理-處理結(jié)束"); logger.debug("響應(yīng)數(shù)據(jù):" + responseStr); } if (responseStr != null) { // 結(jié)果不為空,寫入結(jié)果 response.setContentType("text/xml"); response.getWriter().write(responseStr); response.getWriter().flush(); } } else if (request.getMethod().equals("GET")) { if (logger.isDebugEnabled()) { logger.debug("GET請求,微信公共平臺驗證URL有效性"); } String echostr = request.getParameter("echostr"); if (echostr != null) { // 若echostr不為空,則為微信公共平臺驗證URL有效性 response.getWriter().write(echostr); response.getWriter().flush(); } } } else { // 簽名失敗,不做任何處理。 if (logger.isDebugEnabled()) { logger.debug("簽名驗證失敗"); } } } catch (Exception e) { e.printStackTrace(); } }
只能給出這些信息了。其他源碼不能公開了。
這是微信公眾平臺給出的API調(diào)用性能數(shù)據(jù),還不錯。