2013-09-30 85 views
-3

我是Java新手,开始对它进行一点探索。 我知道这是个愚蠢的问题,但我没有在网上找到任何支持博客或文章,这将澄清我的疑问。JSP中对象的范围

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

如果是,它是如何保留的?因为它们在一起有不同的要求,它是如何认识到它是相同的要求?

由于提前

+2

这是关于** Java **或** JavaScript **的问题吗?也请添加代码,即使是基本的 - 某些代码行可以解释比数千个单词更好的内容... – ppeterka

+1

您正在谈论JSP页面(scriptlets)中使用的Java对象吗? –

+1

可能通过cookies或URL重写 – upog

回答

2

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

有四个可能的范围:

scope="page"--目的是只能从创建它的JSP页面内访问。

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

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

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

Here is the official docs link

1

这个问题更多地与服务器端保持我认为,当你说:“如果我刷新页面”。如果一个servlet存储了页面上显示的值,那么是的,它仍然会在页面上显示它。

如果问题是基于java小程序,并且该值没有被保存,只是输入到文本框然后否,它不会仍然存在。

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

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

0

您可以存储并使用它们保存为属性在一个会话(HttpSession对象)检索对象:

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

例如,我可以节省用户的得分在多-page测验:

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

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