JFinal 是基于 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。 在擁有Java語言所有優勢的同時再擁有ruby、python、php等動態語言的開發效率!為您節約更多時間,去陪戀人、家人和朋友 :)
JFinal有如下主要特點
MVC架構,設計精巧,使用簡單
遵循COC原則,零配置,無xml
獨創Db + Record模式,靈活便利
ActiveRecord支持,使數據庫開發極致快速
自動加載修改后的java文件,開發過程中無需重啟web server
AOP支持,攔截器配置靈活,功能強大
Plugin體系結構,擴展性強
多視圖支持,支持FreeMarker、JSP、Velocity
強大的Validator后端校驗功能
功能齊全,擁有struts2的絕大部分功能
體積小僅248K,且無第三方依賴
jfinal 微信使用的技術
前端使用淘寶tengine(Nginx),基于JAVA語言,采用JFinal開發,數據庫采用PostgreSQL,緩存及隊列采用SSDB。
XML處理采用dom4j,JSON處理采用溫少的fastjson。http相關處理采用HttpClient庫。
經過測試發現使用Nginx做前端可大幅提高響應速度。主要原因可能是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方法會偵測消息事件類型,然后構建對應的對象,并調用對象的parseXML方法完成對消息xml的分析,最后調用注冊的handler來處理響應的消息或者事件。
具體業務實現對應的handler,然后注冊到某個消息或者事件上就可以了。
與JFinal集成部分代碼,主要就是集成JFinal的Handler,然后把請求轉發到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")) { // 微信發送過來的數據(用戶發起) // 接收post過來的數據 String requestStr = readPostData(request); if (logger.isDebugEnabled()) { logger.debug("POST請求,轉發到威爾伯樂微信引擎處理"); logger.debug("POST請求數據:" + requestStr); } String responseStr = null; if (requestStr != null) { responseStr = engineService.handle(requestStr); } if (logger.isDebugEnabled()) { logger.debug("威爾伯樂微信引擎處理-處理結束"); logger.debug("響應數據:" + responseStr); } if (responseStr != null) { // 結果不為空,寫入結果 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調用性能數據,還不錯。
- PC官方版
- 安卓官方手機版
- IOS官方手機版