从线程获取http请求信息

时间:2011-12-21 07:11:18

标签: java multithreading servlets jmx mbeans

是否可以从线程(而不是当前线程)获取http请求信息?

我希望能够枚举所有实时线程并获取每个线程的请求uri。

任何想法?

感谢

1 个答案:

答案 0 :(得分:0)

试试这个:

  1. 创建servlet Filter
  2. 实施DynamicMBean。在Filter的init方法中注册bean(并在destroy方法中取消注册)
  3. 定义synchronized WeakHashMap字段。
  4. 在过滤器的doFilter方法中,在调用FilterChaindoFilter方法之前捕获请求的URI。将线程和请求URI插入WeakHashMap。
  5. 致电链。
  6. 在finally块中,将当前线程和一些任意常量(如 NO REQUEST )插入到WeakHashMap中。
  7. 实现DynamicMBean,以便MBeanInfo在WeakHashMap中为每个线程提供一个MBeanAttributeInfo。使属性命名为线程的名称,并键入 URI (或字符串)。
  8. 实现DynamicMBean,以便getAttribute方法返回与请求的属性名称对应的线程的URI。
  9. 配置过滤器,以便为要跟踪的所有URI范围调用它。
  10. 当您查看MBean的属性时,您将看到在已处理至少一个请求的JVM中仍处于活动状态的每个线程的URI(或 NO REQUEST )。当一个线程终止时(可能在几个GC周期之后),将删除WeakHashMap条目。

    现在看起来有点艰难,但它应该非常简单。

    //尼古拉斯