0

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

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

有任何想法吗?

谢谢

4

1 回答 1

0

试试这个:

  1. 创建一个servlet 过滤器
  2. 使其实现DynamicMBean。在Filter的init方法中注册bean(在destroy方法中注销)
  3. 定义一个同步的 WeakHashMap字段。
  4. 在过滤器的doFilter方法中,在调用FilterChaindoFilter方法之前捕获请求的 URI 。将线程和请求 URI 插入 WeakHashMap。
  5. 调用链。
  6. 在 finally 块中,将当前线程和一些任意常量(如NO REQUEST )插入到 WeakHashMap 中。
  7. 实现 DynamicMBean 以便MBeanInfo在 WeakHashMap 中为每个线程提供一个MBeanAttributeInfo 。使属性名称成为线程的名称和类型为URI(或String)。
  8. 实现 DynamicMBean,以便getAttribute方法返回与请求的属性名称对应的线程的 URI。
  9. 配置过滤器,以便为您要跟踪的所有 URI 范围调用它。

当您查看 MBean 的属性时,您将看到在 JVM 中仍处于活动状态且已处理至少一个请求的每个线程的 URI(或NO REQUEST )。当一个线程终止时(可能在几个 GC 周期之后),WeakHashMap 条目将被删除。

现在读起来有点费劲,但应该很简单。

//尼古拉斯

于 2011-12-21T15:31:07.550 回答