当前位置: 代码迷 >> Web前端 >> 测试 web页面的加载处置时间(1)-Filter实现
  详细解决方案

测试 web页面的加载处置时间(1)-Filter实现

热度:739   发布时间:2012-11-25 11:44:31.0
测试 web页面的加载处理时间(1)-Filter实现

????? 本周一个工作是写一个测试页面加载时间的程序。一开始根本就没有这个概念,就到网上查了下相关的资料,发现大概有三种方法:

????? 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已经添加了一个Filterweb.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>

。。。 。。。

?

重新启动服务器,则会自动记录日志。

上面的来自网络,自己简单的试验了,可以实现。

?

  相关解决方案