重写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);
}