????? 本周一个工作是写一个测试页面加载时间的程序。一开始根本就没有这个概念,就到网上查了下相关的资料,发现大概有三种方法:
????? 1.Filter实现,利用过滤器来记录时间。
??????2.JS实现,在页面开始和结束的时候,记录时间,然后进行操作。
????? 3.利用监听器记录时间。比如JDIC组件的监听功能。
????? 不知道有没有更好的方法了,本来想利用java里的net相关东西实现的,看了api好像实现不了。如果大家有更好的思路请交流下。
???
????? 下面先介绍Filter实现。这个实现完全来自网络。
?
?????? 来自:
http://hi.baidu.com/zhouhuitong/blog/item/d463623da7f7f5e93c6d9766.html
???
CalcPageLoadingTimeFilter.java
?
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
?
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
?
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
?
public class CalcPageLoadingTimeFilter implements Filter {
??? /*
??? * (non Javadoc)
??? *
??? * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
??? * javax.servlet.ServletResponse, javax.servlet.FilterChain)
??? */
??? public void doFilter(ServletRequest request, ServletResponse response,
??????????? FilterChain chain) throws IOException, ServletException {
??????? Log log = LogFactory.getLog(CalcPageLoadingTimeFilter.class);
?
??????? Date startTime = Calendar.getInstance().getTime();
??????? long startTimeLong = Calendar.getInstance().getTimeInMillis();
?
??????? String uri = ((HttpServletRequest) request).getRequestURI();
??????? boolean logTime = false;
??????? if (uri.indexOf(".html") > 0) { // 判断pge loading
??????????????????????????????????????? // time记录条件,这里大家可以根据自己的情况加以改变或者去掉该条件
??????????? logTime = true;
??????? }
?
??????? if (logTime) {
??????????? log.info("[TIME-CALC]URI:" + uri);
??????????? String formatedTime = formatDate(startTime, "yy.MM.dd HH:mm:ss");
??????????? log.info("[TIME-CALC]Start:" + formatedTime);
?????? ?}
?
??????? try {
??????????? chain.doFilter(request, response);
??????? } finally {
??????????? Date endTime = Calendar.getInstance().getTime();
??????????? long endTimeLong = Calendar.getInstance().getTimeInMillis();
?
??????????? if (logTime) {
???????? ???????String formatedTime = formatDate(endTime, "yy.MM.dd HH:mm:ss");
??????????????? log.info("[TIME-CALC]End:" + formatedTime);
??????????????? log.info("[TIME-CALC]Total:" + (endTimeLong - startTimeLong)
??????????????????????? + "ms. " + (endTimeLong - startTimeLong) / 1000 + "s.");
??????????? }
??????? }
??? }
?
??? private static final String formatDate(Date date, String pattern) {
??????? DateFormat df = new SimpleDateFormat(pattern);
?
??????? return df.format(date);
?
??? }
?
??? public void init(FilterConfig filterConfig) throws ServletException {
?
??? }
?
??? public void destroy() {
?
??? }
}
?
把Filter添加到web.xml里面(由于我的web.xml已经添加了一个Filter,web.xml允许添加多个FIlter,请注意他们的添加顺序,粉红色部分即是要添加的Filter)
web.xml
。。。 。。。
<filter>
??????? <filter-name>redirect</filter-name>
??????? <filter-class>org.apache.tapestry.RedirectFilter</filter-class>
??? </filter>
??? <!-- Filter -->
??? <filter>
??????? <filter-name>CalcPageLoadingTimeFilter</filter-name>
??????? <filter-class>com.doone.pcdoctor.test.CalcPageLoadingTimeFilter</filter-class>
??? </filter>
??? <filter-mapping>
??????? <filter-name>redirect</filter-name>
? ??????<url-pattern>/</url-pattern>
??? </filter-mapping>
??? <!-- filter-mapping -->
??? <filter-mapping>
??????? <filter-name>CalcPageLoadingTimeFilter</filter-name>
??????? <url-pattern>/*</url-pattern>
??? </filter-mapping>
。。。 。。。
?
重新启动服务器,则会自动记录日志。
上面的来自网络,自己简单的试验了,可以实现。
?