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