java servlet threadlocal_java – 用于在servlet中存储ServletRequest和Response的ThreadLocal:用于什么?...

一旦我遇到了一个模式,ServletRequest和响应对象被放到servlet的本地ThreadLocal变量中. servlet类还有获取当前请求和响应对象的方法.因此,为了获得这些对象,您仍然需要使用servlet对象.

拥有这些ThrealLocal局部变量有什么意义?

解决方法:

关键是在类中具有请求和响应对象,否则它们将不具有它们(例如它们不是servlet).一个例子是JSF托管bean – 它们的方法不接受HttpServletRequest参数,因此您可以通过FacesContext获取请求,FacesContext将它们包含在ThreadLocal变量中.

这样做的原因是因为每个请求都由一个单独的线程(由servlet容器)处理.所以thread = request.但有一点需要注意 – 容器倾向于使用线程池.因此,必须始终在threadlocal中设置一个新请求,最好在之后清理它(例如在Filter中).否则你会得到一些意想不到的行为.

但是你应该在代码中避免这种情况.如果您需要请求或响应中的任何内容,请将其作为方法参数传递.否则,您可能会违反图层边界(例如,如果您想在服务图层中使用该请求)

标签:thread-local,java,java-ee,servlets

来源: https://codeday.me/bug/20190927/1822665.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值