在jsp中读取会话属性

在jsp中读取会话属性,jsp,session-variables,Jsp,Session Variables,我在一个名为cartList的servlet中设置一个session属性,它是一个字符串数组,如下所示 request.getSession().setAttribute("cartList", items); line123:String[] cartItems = (String[]) request.getSession().getAttribute("cartList"); line124:for (int i = 0; i < cartItems.length; i++) {

我在一个名为cartList的servlet中设置一个session属性,它是一个字符串数组,如下所示

request.getSession().setAttribute("cartList", items);
line123:String[] cartItems = (String[]) request.getSession().getAttribute("cartList");
line124:for (int i = 0; i < cartItems.length; i++) {
    line125:String[] cartItem = cartItems[i].split("\\|");
其中items是String类型的对象数组

在jsp中,我像这样调用上面的属性

request.getSession().setAttribute("cartList", items);
line123:String[] cartItems = (String[]) request.getSession().getAttribute("cartList");
line124:for (int i = 0; i < cartItems.length; i++) {
    line125:String[] cartItem = cartItems[i].split("\\|");
line123:String[]cartItems=(String[])request.getSession().getAttribute(“cartList”);
第124行:for(int i=0;i
cartItems[i]永远不会为空,并且将包含如下字符串[AAA-000 | 2]

我在第125行得到一个异常,这是一个nullpointerexception。我不知道为什么会出现这个错误。我正在检查servlet中“items”的内容,它很好,不是空的。
我花了一整天的时间试图解决这个问题。我已经束手无策了!非常感谢您的帮助!

问题不在于您没有从会话中获得
cartItems
。问题在于
cartItems
的某些值包含null。在调用
split()
之前,请打印
cartItems[I]的值
查看它携带的内容

String[] cartItems = (String[]) request.getSession().getAttribute("cartList");
for (int i = 0; i < cartItems.length; i++) {
    out.println("cartItems["+i+"]: "+cartItems[i]);
    String[] cartItem = null;
    if(cartItems[i]!=null)
        cartItem = cartItems[i].split("\\|");
}
String[]cartItems=(String[])request.getSession().getAttribute(“cartList”);
对于(int i=0;i

如果您看到某些值为
null
,请返回到servlet,确保在将它们放入
cartList
之前为它们分配了一些值,问题不是您没有从会话中获取
cartItems
。问题是
cartItems
的某些值包含null。在调用
split()之前
,打印
cartItems[i]
的值以查看它携带的内容

String[] cartItems = (String[]) request.getSession().getAttribute("cartList");
for (int i = 0; i < cartItems.length; i++) {
    out.println("cartItems["+i+"]: "+cartItems[i]);
    String[] cartItem = null;
    if(cartItems[i]!=null)
        cartItem = cartItems[i].split("\\|");
}
String[]cartItems=(String[])request.getSession().getAttribute(“cartList”);
对于(int i=0;i

如果您看到一些值为
null
,请返回到servlet并确保在将它们放入
cartList

之前为它们分配了一些值,您确定在jsp中正确获取了值吗?此外,在jsp中,您有一个内置会话变量,无需编写请求。getSession();感谢您的快速响应。我不知道jsp中是否正确获取了值。如何检查?我认为request.getSession()是访问会话属性的唯一方法。我不需要会话对象来访问会话属性并获取会话对象吗?我不必执行request.getSession()?@user686997:只需将
System.out.println(carItems)放入;
在jsp中从会话中获取值后。是的,正确获取了值。@用户问题不是您没有获取cartItems。问题是cartItems的某些值包含null。如果cartItems为null,则它应该在cartItems.length for循环中抛出NullPointerException。您确定在jsp中获取了值吗正确吗?同样在jsp中,您有一个内置会话变量,无需编写request.getSession();感谢您的快速响应。我不知道jsp中是否正确获取了该值。我如何检查它?我想request.getSession()是访问会话属性的唯一方法。我不需要会话对象来访问会话属性并获取会话对象吗?我不需要执行请求。getSession()?@user686997:只需检查put
System.out.println(carItems);
在jsp中从会话中获取值后。是的,正确获取了值。@用户问题不是您没有获取cartItems。问题是cartItems的某些值包含null。如果cartItems为null,则它应该在for循环中的cartItems.length处抛出NullPointerException。@Craftsmers:您的代码片段有帮助我意识到数组中有空值。我现在已经修复了它。谢谢!@sherry you's welcome:)顺便说一句,只是一个建议:在这种情况下使用调试器非常有用,可以节省您很多时间。关于如何使用调试器有什么建议吗?到目前为止,我一直在使用print语句。我强烈建议使用IDE。它非常有用y提高了程序员的效率。对于初学者来说,NetBeans很好。它简单、直观且易于入门。一旦您熟悉Java,就切换到Eclipse。您可以通过谷歌搜索大量关于使用NetBeans和Eclipse调试的教程来找到。@Craftsmers:您的代码片段帮助我意识到数组中存在空值。I h我现在已经修好了。谢谢!@sherry,不客气:)顺便说一句,只是一个建议:在这种情况下使用调试器非常有帮助,可以节省您很多时间。关于如何使用调试器,有什么建议吗?到目前为止,我一直在使用打印语句。我强烈建议使用IDE。它可以极大地提高程序员的效率。对于初学者,请使用NetBeans很好。它简单、直观且易于入门。一旦您熟悉Java,就切换到Eclipse。您可以通过谷歌搜索大量关于使用NetBeans和Eclipse进行调试的教程来找到它。