service层引用request

想在Service层也就是非controler层获取request,或者session对象

原因:想把jpress改成多站点的, 根据不同域名对应不同的模板的站点。但是才准备改就发现了个问题,有很地方引入了currentTemplate() 算是service中的一个方法,这里面想加个判断,根据request.getServerName(也就是域名)来进行切换模板。但是这里怎么获取request对象呢,如果单纯的参数里面直接传request对象的话改动比较大,有没有一劳永逸的好办法呢


评论区

JFinal

2017-10-23 11:20

不建议 service 层依赖 web 层的东东,耦合度太高,可以在控制层先把参数准备妥当后,再传入给 service 层

如果一定要这么用,可以引入一个全局拦截器,大致如下:
public Context implements Interceptor {
static final ThreadLocal TL = new ThreadLocal();
public void intercept(Invocation inv) {
TL.set(inv.getController().getSession());
try {
inv.invoke();
} finally {
TL.remove();
}
}

public static Session getSession() {
return TL.get();
}
}

然后添加这个拦截器为全局拦截器,用的时候这样:
Context.getSession();

热门反馈

扫码入社