论坛首页 Java企业应用论坛

仿照FirePHP的FireJava简单实现

浏览 1890 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-10-29  
这个题目有点标题党了,刚看到群里有人说到FirePHP,这个东西很久前就有了,不过有这个需求的人也不多,用的人也很少,三年前倒是似乎流行过一段时间,不过现在也无人问津了。重视调试的人也少了,都急着堆代码。
    实际上,FirePHP并不是PHP专用的,任何语言都能使用。只要在firefox浏览器上安装firebug & firephp Extension 扩展后即可。如果是PHP语言,只需再下载一个FirePHPCore放到服务器端,在PHP代码里加几句代码即可,很简单的。如果是其他语言想使用呢?很简单,只需要在header里输出一个特殊的头,激活客户端的firephp Extension即可。firePHP的响应头如下所示,以X-Wf开头,前三个是固定的,用来通知浏览器,第四个则是用来输出数据的,JSON格式,很好理解。
X-Wf-Protocol-1     http://meta.wildfirehq.org/Protocol/JsonStream/0.2

X-Wf-1-Plugin-1     http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3

X-Wf-1-Structure-1  http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1



X-Wf-1-1-1-1        62|[{"Type":"LOG","File":" ... Test.php","Line":3},"Hello World"]|


第四行标记头的那串数字是用来排序的,后面的内容是按如下格式组织的:

<size> | [ <meta> , <body> ] |



意义一看就明白。Type属于meta的一部分,可能的取值有 LOG ,INFO,WARN, ERROR,EXCEPTION,TABLE等等。更详细的可以看文档:[url]http://www.firephp.org/Wiki/Reference/Protocol [/url],这里把所有的都说的清清楚楚了。
  回到正题,那其它语言要实现怎么办呢?很简单啊,输出header,用JSON啊。比如以Java为例,我们可以:
public class FirelogServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException {

        //输出header,输出调试数据,以下代码只贴出核心部分

    response.setHeader("X-Wf-Protocol-1", "http://meta.wildfirehq.org/Protocol/JsonStream/0.2");

        response.setHeader("X-Wf-1-Plugin-1", "http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3");

        response.setHeader("X-Wf-1-Structure-1", "http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1");

    StringBuffer msgBuffer = new StringBuffer();

        msgBuffer.append("[{\"Type\":\"");

        msgBuffer.append(type);

        msgBuffer.append("\"},");

        msgBuffer.append(Json.encode(obj));

        msgBuffer.append(']');

        response.setHeader("X-Wf-1-1-1-" + i, String.format("%d|%s|", msgBuffer.length(),msgBuffer.toString()));

        // TODO write HTML to out

    }

}


     不过就是简单的包装了下Servlet而已,只需在上面的代码基础上稍作修改即可。不过有了log4j,貌似用这个的需求不是很多。但我还是觉得这东西开发Ajax时会有点帮助的。另外,FirePHP官方也贴出了Java实现的链接,不过感觉没必要单独下个Jar包,自己写代码也不过200行代码即可完美搞定。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics