我是 Java 新手,开始稍微探索一下。我知道这是个愚蠢的问题,但我没有在网上找到任何支持性的博客或文章来澄清我的疑问。
我想知道 Java 对象的范围。考虑一个场景:假设我在浏览器中访问一个页面说“索引”,它正在使用对象 X,它有一些值,如果我刷新页面,我可以获得对象 X 的先前值吗?
如果是,它是如何保持的?因为这都是一个不同的请求,它如何识别它是同一个请求?
提前致谢
我强烈建议您阅读有关Object
范围的官方文档。
有四种可能的范围:
scope="page"--
该对象只能从创建它的 JSP 页面中访问。
scope="request"--
可以从任何为创建该对象的 JSP 页面提供服务的 HTTP 请求提供服务的 JSP 页面访问该对象。
scope="session"--
可以从与创建该对象的 JSP 页面共享相同 HTTP 会话的任何 JSP 页面访问该对象。
scope="application"--
可以从与创建该对象的 JSP 页面相同的 Web 应用程序(在任何单个 Java 虚拟机中)中使用的任何 JSP 页面访问该对象。
当您说“如果我刷新页面”时,我假设这个问题更多地与服务器端保留有关。如果 servlet 存储了页面上显示的值,那么是的,它仍然会在页面上显示它。
如果问题是基于 java applet 并且该值没有被持久化并且只是输入到一个文本框中,那么不,它不会仍然存在。
如果您想了解对象范围,您可以考虑用一个示例重新表述您的问题。例如,大多数带有浏览器的 Web 场景可能会使用诸如 Spring 之类的框架,它比对象范围更复杂一些。
如果您想了解有关 web 范围的更多信息,请考虑查看有关 servlet 生命周期的这个 oracle 页面。
您可以使用以下方法通过将对象保存为会话(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();
这对于遍历/刷新页面是持久的。即使它不是同一个请求,它也是同一个会话。