gpt4 book ai didi

java - 关于请求对象行为的混淆

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:08 27 4
gpt4 key购买 nike

我一直在摆弄 servlet 和 JSP,我对某些事情有点困惑:

  1. 我制作了一个 servlet( Controller ),它将请求分派(dispatch)给 JSP

  2. 我已经使用我的 setAttribute() 方法为请求对象设置了一些属性小服务程序。

  3. 我可以在 JSP 中访问请求对象的参数和属性,而无需任何操作
    问题。

  4. 现在我使用
    将请求对象作为属性存储在 session 对象中session.setAttribute("测试", 请求)。

  5. 我已经编写了第二个 JSP(从第一个 JSP 导航到它会通过
    单击特定按钮时的 Javascript - 通过使用 window.location 函数和
    给出第二个 JSP 的地址作为值)

  6. 在第二个 JSP 中,当我从 session 对象中检索请求对象时,我得到一个
    检索到的请求对象的所有属性的空值。
  7. 我可以访问检索到的请求对象的参数,但前提是我已经检索到
    使用 request.getParameter() 方法在我的第一个 JSP 中至少使用一次参数
    否则他们会在我的第二个 JSP 中返回 null。

我对这些东西真的很陌生,对这种行为感到困惑。为什么我的请求对象的属性被“删除”而参数保持不变(只要我访问了我的第一个 JSP 中的参数;这让我更加困惑,因为它在 IMO 中没有意义)

任何解释将不胜感激!提前致谢。

最佳答案

这只是一个有根据的猜测,但我认为问题在于您选择的容器中的请求对象可能对其参数不敏感:当您向它请求参数时,它会接触到一些外部上下文并提取所需的数据,同时缓存它。

然而,奇怪行为的原因并不重要。该问题应该通过不在 session 中保存请求来解决。请求对象只是您对当前请求的句柄,而不是数据存储本身。它可能在底层使用任何机制,因为我们知道属性可能存储在 threadlocals 中。绝对没有契约(Contract)可以让请求充当任何类型的文件。例如:如果我向安全主体询问这样一个存储的请求,这意味着什么?我的意思是“ session 的现任校长”吗?我的意思是“创建请求时的委托(delegate)人”吗?

编辑:

出于纯粹的好奇心,我只是看了一下 Tomcat 的实现(我不知道你使用的是哪个容器),发现它支持我的说法:不仅大部分数据是惰性收集的,而且请求对象是回收的!因此,如果您尝试将其存储在 session 中然后使用,您可能会发现您正在使用其他人的请求。

关于java - 关于请求对象行为的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14716356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com