2019独角兽企业重金招聘Python工程师标准>>>
重写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);}