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官方手机版