`
guozheng
  • 浏览: 70589 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

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

    博客分类:
  • JDIC
阅读更多

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

      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>

。。。 。。。

 

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

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

 

分享到:
评论

相关推荐

    dd-wrt fantasia

    增加dns缓存记录条数,并可在webgui指定老化时间 测试性添加arp防护功能 1.0 - Build 20110405 调整arp防护选项的位置 添加清空arp缓存的细节,防止限定未绑定主机的功能在开机后短时间内失效 1.0 - Build ...

    asp.net知识库

    如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页...

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...

    Nginx安装包

    4 &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt; 5 &lt;/filter&gt; 6 &lt;filter-mapping&gt; 7 &lt;filter-name&gt;springSessionRepositoryFilter&lt;/filter-name&gt; 8 &lt;url-pattern&gt;/*&lt;/url-...

    客户关系管理系统框架搭建(二)

    -- 1 配置注解的自动扫描--&gt; &lt;context:component-scan base-package="cn.itcast.crm"/&gt; &lt;!--3 配置本地化代理工程bean,这是spring整合hibernate的入口 --&gt; &lt;!--表示在类路径下加载...

    ASP.net实例光盘源码:

    Sample_03_02/Error.aspx 处理页面的错误 Sample_03_02/HtmlLUrlCode.aspx HTML编码 Sample_03_02/MappathUrl.aspx 映射虚拟路径 Sample_03_02/Src.aspx 源页面 Sample_03_03/GetData.aspx...

    python入门到高级全栈工程师培训 第3期 附课件代码

    09 基于tcp实现远程执行命令测试结果 10 粘包现象 11 粘包解决方法 第31章 01 上节课复习 02 socketserver实现并发 03 socketserver模块介绍 04 socketserver源码分析tcp版本 05 socketserver源码分析udp版 06 ftp...

    springboot参考指南

    1. 介紹 2. I. Spring Boot文档 i. 1. 关于本文档 ii. 2. 获取帮助 iii. 3. 第一步 iv. 4. 使用Spring Boot v. 5. 了解Spring Boot特性 vi. 6. 迁移到生存环境 vii. 7. 高级主题 3. II. 开始 i. 8. Spring Boot介绍 ...

    Java EE常用框架.xmind

    根据由谁处理当前任务,我们就可以查询出具体的任务信息。 根据任务的id,我们就可以执行任务了。 细节 流程定义:涉及到了四张数据库表 我们可以通过API把我们的流程定义图读取出来 可以根据...

    《MyEclipse 6 Java 开发中文教程》前10章

    10.2.5 如何加载多个Spring配置文件 210 10.3 开发Spring 1.2 AOP应用 211 10.3.1 开发Man对象 211 10.3.2 开发前置通知(Before advice)对象:FBI 212 10.3.3 装配拦截器和Bean 212 10.3.4 测试和运行 214 10.3.5 ...

    服务器iis安全专家.zip

    1. 合并了之前的ISAPI EXTENTED DLL模块到Virtualiisfirewall的IsApi Filter模块,使之成为IIS双接口,使各种关键数据得以共享。速度,更快,更稳定。 2.去掉了之前收费软件的各种认证校验,软件免费,只需要激活...

    ZendFramework中文文档

    1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...

    flex3的cookbook书籍完整版dpf(包含目录)

    处理测试用例事件 24.8节. 用FlexUnit测试可视化组件 24.9节. 安装和配置Antennae 24.10节. 生成自动测试集 第二十五章. 编译与调试(772) 25.1节. 在Flex Builder外使用Trace语句 25.2节. 使用组件编译器 25.3节....

    Python核心编程第二版

     11.7.2 内建函数apply()、filter()、map()、reduce()   11.7.3 偏函数应用   11.8 变量作用域   11.8.1 全局变量与局部变量   11.8.2 globa语句   11.8.3 作用域的数字   11.8.4 闭包...

    EaglePHP 2.7

    13、高安全性,内置Filter组件实现过滤机制,防止SQL注入及XSS跨站脚本攻击。 14、支持ORM,真正实现OOP开发的快捷且性能优越。 15、内置Doc输出模块,为指定项目生成CHM或HTML格式的API开发手册。 安装步骤: ...

    老男孩第三期Python全栈开发视频教程 零基础系统学习Python开发视频+资料

    ├─(1) 01 python s3 day41 JS的历史以及引入方式.avi ├─(2) 02 python s3 day41 JS的基础规范.avi ├─(3) 03 python s3 day41 JS的基本数据类型.avi ├─(4) 04 python s3 day41 JS的运算符.avi ├─(5) 05 ...

Global site tag (gtag.js) - Google Analytics