JfinalUIB 代码笔记 (2)--- jfinal中视图耗时计算

 重写Render和RenderFactory类,这里是Beetl的实现方式,如果是JSP,也是同样的方式继承JspRender和JspRenderFactory即可

/**
 * 继承BeetlRender,实现视图耗时的计算
 * @author 董华健
 */
public class MyBeetlRender extends BeetlRender {
 private static final long serialVersionUID = 508975754500775679L;
 private static Logger log = Logger.getLogger(MyBeetlRender.class);
 
 public static final String renderTimeKey = "renderTime";
 
 public MyBeetlRender(GroupTemplate gt, String view) {
  super(gt, view);
 }
 public void render() {
  log.debug("MyBeetlRender render start");
  long start = System.currentTimeMillis();
  super.render();
  long end = System.currentTimeMillis();
  long renderTime = end - start;
  request.setAttribute(MyBeetlRender.renderTimeKey, renderTime);
  log.debug("MyBeetlRender render end");
 }
}
/**
 * 继承BeetlRenderFactory,调用MyBeetlRender,实现视图耗时计算
 * @author 董华健
 */
public class MyBeetlRenderFactory extends BeetlRenderFactory {
 
 private static Logger log = Logger.getLogger(MyBeetlRenderFactory.class);
 public Render getRender(String view) {
  log.debug("MyBeetlRenderFactory start");
  BeetlRender render = new MyBeetlRender(groupTemplate, view);
  log.debug("MyBeetlRenderFactory end");
  return render;
 }
 public String getViewExtension() {
  return ".html";
 }
}

 在JFinalConfig中配置,在configConstant方法中加入

 me.setMainRenderFactory(new MyBeetlRenderFactory());

获取视图耗时,这个代码应该在

Interceptor的ai.invoke();之后

或者 

Handler中的nextHandler.handle(target, request, response, isHandled);之后

// 视图耗时
  long renderTime = 0;
  if(null != request.getAttribute(MyBeetlRender.renderTimeKey)){
   renderTime = (long) request.getAttribute(MyBeetlRender.renderTimeKey);
  }

你可能感兴趣的:(视图,jFinal,耗时)