【问题标题】:Scope of object in JSPJSP中对象的范围
【发布时间】:2013-09-30 09:04:02
【问题描述】:

我是 Java 新手,开始稍微探索一下。 我知道这是个愚蠢的问题,但我没有在网上找到任何支持性的博客或文章来澄清我的疑问。

我想知道 Java 对象的范围。 考虑一个场景:假设我在浏览器中访问一个页面说“索引”,它使用对象 X 并带有一些值,如果我刷新页面,我可以得到对象 X 的先前值吗?

如果是,它是如何成立的?因为这都是一个不同的请求,它如何识别它是同一个请求?

提前致谢

【问题讨论】:

  • 这个问题是关于 Java 还是 JavaScript?也请添加代码,即使是基本的 - 一些代码行比数千个单词更好地解释你想问的......
  • 您说的是 JSP 页面(scriptlet)中使用的 Java 对象?
  • 可能是通过 cookie 或 URL 重写
  • 你说的是维护会话吗?
  • @SureshKamrushi:嗯,在 JSP 中对象有四个不同的范围——应用程序、会话、页面和请求。尝试使用这些关键字搜索 Google。另一个建议 - 不要以这种方式使用 Java 对象,并完全避免使用 Scriptlets。

标签: java scope


【解决方案1】:

我强烈建议您阅读Object 范围内的官方文档。

有四种可能的范围:

scope="page"--该对象只能从创建它的 JSP 页面中访问。

scope="request"--该对象可以从任何为创建该对象的 JSP 页面所服务的 HTTP 请求提供服务的 JSP 页面访问。

scope="session"--该对象可从与创建该对象的 JSP 页面共享相同 HTTP 会话的任何 JSP 页面访问。

scope="application"--该对象可从与创建该对象的 JSP 页面相同的 Web 应用程序(在任何单个 Java 虚拟机中)中使用的任何 JSP 页面访问。

Here is the official docs link

【讨论】:

    【解决方案2】:

    当您说“如果我刷新页面”时,我假设这个问题更多地与服务器端保留有关。如果 servlet 存储了页面上显示的值,那么是的,它仍然会在页面上显示它。

    如果问题是基于 java 小程序的,并且该值没有被持久化并且只是输入到一个文本框中,那么不,它不会仍然存在。

    如果您想了解对象范围,可以考虑用一个示例重新表述您的问题。例如,大多数带有浏览器的 Web 场景可能会使用像 Spring 这样的框架,它比对象作用域要复杂一些。

    如果您想了解有关 web 范围的更多信息,请考虑查看有关 servlet 生命周期的 this oracle page

    【讨论】:

      【解决方案3】:

      您可以通过将对象保存为会话(HttpSession 对象)中的属性来存储和检索对象,方法是:

      public void setAttribute(java.lang.String name, java.lang.Object value)
      public java.lang.Object getAttribute(java.lang.String name)
      

      例如,我可以保存用户在多页测验中的分数:

      session.setAttribute("score", (Integer) value);
      score = ((Integer) (session.getAttribute("score"))).intValue();
      

      这对于遍历/刷新页面是持久的。即使不是同一个请求,也是同一个会话。

      【讨论】:

        猜你喜欢
        • 2013-07-04
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 2018-03-17
        • 2012-08-31
        • 2013-02-17
        • 1970-01-01
        • 2014-10-17
        相关资源
        最近更新 更多