Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpSession,session.getAttribute(),问题_Java_Jsp_Session_Servlets - Fatal编程技术网

Java HttpSession,session.getAttribute(),问题

Java HttpSession,session.getAttribute(),问题,java,jsp,session,servlets,Java,Jsp,Session,Servlets,我有一个与JavaServlet会话相关的问题。我不明白为什么会话对象的getAttribute()函数在setAttribute()之前使用以下是代码: Vector buylist=(Vector)session.getAttribute("Register"); if (action.equals("del")) { String del = request.getParameter("deli"); int d = (new Integer(del)).intValue(); buyli

我有一个与JavaServlet会话相关的问题。我不明白为什么会话对象的
getAttribute()
函数在
setAttribute()之前使用以下是代码:

Vector buylist=(Vector)session.getAttribute("Register");
if (action.equals("del")) {
String del = request.getParameter("deli");
int d = (new Integer(del)).intValue();
buylist.removeElementAt(d);
}
session.setAttribute("Register", buylist);

谢谢

因为
Register
属性可以从其他地方设置(比如从jsp(在坏的情况下)、Servlet或过滤器中设置)

我能想到的唯一解释是:首先检索向量,然后进行更改,然后将其存储回会话对象。

代码要么已损坏,要么
setAttribute()
是徒劳的

如果您从会话中获得一个可变容器(如列表或向量),则无需将其再次放入会话中。它相当于此代码:

 session.setAttribute("Register", buylist);
 session.setAttribute("Register", buylist);
 session.setAttribute("Register", buylist);
只有第一行有效果

另一种可能是代码有bug,真正的意思是:

Vector buylist = session.getAttribute("Register");
if( buylist == null ) {
    buylist = new Vector();
    session.setAttribute("Register", buylist);
}

i、 e.创建一个新的向量(如果它还不存在)

此代码旨在保存由Register session属性表示的修改向量。
但是,即使删除或添加了某些元素,也不需要将属性设置回原来的位置,因为它是存储在会话中的引用,对它的任何更改实际上都应用于同一对象。

询问编写它的同事。或者你们通过stackoverflow进行交流?:-)我不明白一件事,我们不是应该先设置属性,然后在会话中使用getAttribute方法吗!这段代码是如何使用“Register”属性的?如果在任何地方都没有定义它,那么定义属性“Register”的唯一方法就是使用setAttribue()然后使用getAttribute将其存储在会话中<对于未知属性,code>getAttribute()
将返回
null
。您发布的代码只有在其他人已将
Register
属性放在会话的某个位置时才有效。因为你没有得到NPE,这一定发生了。