-3

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

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

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

提前致谢

4

3 回答 3

2

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

有四种可能的范围:

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

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

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

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

这是官方文档链接

于 2013-09-30T09:12:10.857 回答
1

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

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

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

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

于 2013-09-30T09:08:02.647 回答
0

您可以使用以下方法通过将对象保存为会话(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-09-30T09:14:16.473 回答