当前位置: 首页 > 面试题库 >

ThreadLocal将ServletRequest和Response存储在Servlet中:用于什么?

阙阳
2023-03-14
问题内容

一旦碰到了一个模式,ServletRequest就将其中和响应对象放入servlet的局部ThreadLocal变量。Servlet类还具有获取当前请求和响应对象的方法。因此,为了获得这些对象,您仍然需要使用servlet对象。

这些ThrealLocal局部变量的意义何在?


问题答案:

关键是将请求和响应对象放在本来没有类的类中(例如,它们不是servlet)。一个示例是JSF托管Bean-
它们的方法不带HttpServletRequest参数,因此您可以通过来获取请求FacesContext,该请求将它们包含在ThreadLocal变量中。

之所以起作用,是因为每个请求都由一个单独的线程(由servlet容器)处理。所以线程=请求。但是需要注意的是-
容器倾向于使用线程池。因此,必须始终在threadlocal中设置一个新的请求,最好在之后将其清除(例如在中Filter)。否则,您会得到一些意想不到的行为。

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



 类似资料:
  • 本文向大家介绍关于ThreadLocal对request和response的用法说明,包括了关于ThreadLocal对request和response的用法说明的使用技巧和注意事项,需要的朋友参考一下 记得在一篇博文中看到描述threadLocal的一句话: ThreadLocal除了适用于多线程保证每条线程都有自己的变量副本外,还适用于在线程上下文中共享某些变量值。 这两种说法是有区别的。前者

  • 我不明白为什么ServletRequest有一个setAttribute方法。如果我有一个包含一个文本框和一个提交按钮的jsp页面。。。 我的目标是当我提交时,我的名字应该显示在那个文本框中。问题:文本框中显示的任何内容都是来自servlet的响应,对吗? 但在我在servlet部分的作业中:这是一个书面请求。setAttribute(“名称”、“abc”); 在jsp端: 它是这样写的:

  • 问题内容: 任何人都可以用C,C ++和Java清楚地解释一下。什么都在堆栈上,什么都在堆上以及何时分配。 我所知道的, 每个函数调用的所有局部变量(无论是基元,指针还是引用变量)都在新的堆栈框架上。 使用new或malloc创建的所有内容都会进入堆。 我对几件事感到困惑。 是在堆上创建的对象成员的引用/基元是否也存储在堆上? 以及在每个框架中递归创建的方法的那些本地成员呢?它们都在堆栈上吗?如果

  • 这个问题涵盖了一个软件算法 我正在解决亚马逊软件问题中的一个面试问题,特别是< br >“给定一组点(x,y)和一个整数“n”,返回n个接近原点的点” 下面是这个问题的高级伪代码示例答案,来自示例答案 步骤1:设计一个名为point的类,它有三个字段-int x,int y,int distance 第2步:对于所有给定的点,找到它们与原点之间的距离 第一步:将值存储在二叉树中 我同意步骤1和2,

  • 问题内容: 我想将Swift样式字符串数组保存到NSUserDefaults中,但是代码中的“ if”语句通常说returnValue始终为nil。 在稍后的代码中(iOS 8),我想使用“ food + = [” spaghetti“]添加新条目。 问题答案: 以下代码应帮助您解决问题: 但是,使用前面的代码,如果您设置,则会遇到问题,因为不会返回。为了避免这种情况,您可能更喜欢以下代码:

  • 假设我们有三个熊对象:妈妈、爸爸和宝宝。我们创建一个“bears”ArrayList,并将指向三个bears的指针添加到ArrayList。 上面的代码生成文档中所示的内存结构。 请注意,行bears.add(妈妈)没有将妈妈熊对象的副本添加到ArrayList。相反,它只是向ArrayList添加了一个指向妈妈熊对象的指针。在Java中,有这样一个对象的“浅”指针是很常见的——有一个对象周围分布