JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
MVC架构,设计精巧,使用简单
遵循COC原则,零配置,无xml
独创Db + Record模式,灵活便利
ActiveRecord支持,使数据库开发极致快速
自动加载修改后的java文件,开发过程中无需重启web server
AOP支持,拦截器配置灵活,功能强大
Plugin体系结构,扩展性强
多视图支持,支持FreeMarker、JSP、Velocity
强大的Validator后端校验功能
功能齐全,拥有struts2的绝大部分功能
体积小仅248K,且无第三方依赖
前端使用淘宝tengine(Nginx),基于JAVA语言,采用JFinal开发,数据库采用PostgreSQL,缓存及队列采用SSDB。
XML处理采用dom4j,JSON处理采用温少的fastjson。http相关处理采用HttpClient库。
经过测试发现使用Nginx做前端可大幅提高响应速度。主要原因可能是Nginx建立连接更快吧。
核心接口:
publicinterfaceHandler<T,R>{ Thandle(Rrequest); }publicinterfaceRequestMessage{ publicvoidparseXml(Elementroot); }publicinterfaceResponseMessage{ publicvoidtoXml(Elementroot); }publicinterfaceEngineServiceextendsService{ /** *@Title:handle *@Description:处理收到的消息字符串 *@param:@parammsgText消息字符串 *@return:Stringxml字符串 */ publicStringhandle(StringmsgText); /** *@Title:registEventHandler *@Description:注册事件处理器 *@param:@parameventType事件类型 *@param:@paramhandler事件处理器 */ publicvoidregistEventHandler(EventTypeeventType,Handler<RequestMessage,ResponseMessage>handler); /** *@Title:registInMessageHandler *@Description:注册消息处理器 *@param:@parammsgType消息类型 *@param:@paramhandler消息处理器 */ publicvoidregistInMessageHandler(InMsgTypeinMsgType,Handler<RequestMessage,ResponseMessage>handler); /** *@Title:registUnsupportedInMesssageHandler *@Description:注册不支持的消息/事件处理器 *@param:@paramhandler处理器 */ publicvoidregistUnsupportedInMessageHandler(Handler<RequestMessage,ResponseMessage>handler); /** *@Title:registUnsupportedMesssageHandler *@Description:注册不支持的消息/事件处理器 *@param:@paramhandler处理器 */ publicvoidregistUnsupportedEventHandler(Handler<RequestMessage,ResponseMessage>handler); }
EngineService的handle方法会侦测消息事件类型,然后构建对应的对象,并调用对象的parseXML方法完成对消息xml的分析,最后调用注册的handler来处理响应的消息或者事件。
具体业务实现对应的handler,然后注册到某个消息或者事件上就可以了。
与JFinal集成部分代码,主要就是集成JFinal的Handler,然后把请求转发到EngineService的handle方法上。
publicvoidhandle(Stringtarget,HttpServletRequestrequest, HttpServletResponseresponse,boolean[]isHandled){ isHandled[0]=true; try{ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); if(checkSignature(request)){ if(request.getMethod().equals("POST")){ //微信发送过来的数据(用户发起) //接收post过来的数据 StringrequestStr=readPostData(request); if(logger.isDebugEnabled()){ logger.debug("POST请求,转发到威尔伯乐微信引擎处理"); logger.debug("POST请求数据:"+requestStr); } StringresponseStr=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(); } }elseif(request.getMethod().equals("GET")){ if(logger.isDebugEnabled()){ logger.debug("GET请求,微信公共平台验证URL有效性"); } Stringechostr=request.getParameter("echostr"); if(echostr!=null){ //若echostr不为空,则为微信公共平台验证URL有效性 response.getWriter().write(echostr); response.getWriter().flush(); } } }else{ //签名失败,不做任何处理。 if(logger.isDebugEnabled()){ logger.debug("签名验证失败"); } } }catch(Exceptione){ e.printStackTrace(); } }
只能给出这些信息了。其他源码不能公开了。
这是微信公众平台给出的API调用性能数据,还不错。