jfinal拦截器在函数执行完毕后inv获取不到参数

public class DemoInterceptor implements Interceptor {
    public void intercept(Invocation inv) {
       System.out.println("Before method invoking");
       //A:在另外一个线程中inv.getController().getPara...
       inv.invoke();
       System.out.println("After method invoking");
       
       //B:主线程执行完毕返回
    }
}


当主线程执行到B并从函数返回后,在A处的其他线程无法获取请求参数inv.getController().getPara...

若在主线程中获取参数不符合设计原则,并且降低了主线程访问速度。

Q: 有没有办法在不影响主线的前提下稳定的在其他线程中获取参数的方法?


评论区

JFinal

2018-06-09 17:58

getPara() 底层是从 Controller 中的 HttpServletRequest request 属性对象中获取值

但是这个 HttpServletRequest request 的作用域是当前请求,也就是说当前请求(主线程)在执行完毕后会回收或者销毁这个 request 对象

当你新创建的另一个线程去读取 request 对象中的数据时,必然是错误的

简单来说,将 controller 或者 request 对象传入另一个线程,一定是错误的,因为这两类对象的作用域是 “当前请求”,当前请求交互结束,对象生命周期立即结束

所以你在新创建的线程中是在使用一个无用的对象

正确的作法是先使用 getPara() 获取该获取的参数,然后传递给新创建的线程

热门反馈

扫码入社