Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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服务器上的Web编程,空指针异常_Java_Servlets - Fatal编程技术网

Java服务器上的Web编程,空指针异常

Java服务器上的Web编程,空指针异常,java,servlets,Java,Servlets,当我第一次在服务器上运行JavaServlet时,所有的网页都运行良好,并没有问题。但是当我停止服务器,重新启动它并再次运行servlet时,在一个页面上出现了一个空指针异常。我试图打印出现此错误的内容,但当我在其中写入System.out.printl(“某物”)并再次运行servlet(多次重新启动服务器)时,不会再引发异常 有人能帮忙解决这个问题吗 这里是doPost方法,其中抛出了异常 protected void doPost(HttpServletRequest request, H

当我第一次在服务器上运行JavaServlet时,所有的网页都运行良好,并没有问题。但是当我停止服务器,重新启动它并再次运行servlet时,在一个页面上出现了一个空指针异常。我试图打印出现此错误的内容,但当我在其中写入
System.out.printl(“某物”)
并再次运行servlet(多次重新启动服务器)时,不会再引发异常

有人能帮忙解决这个问题吗

这里是doPost方法,其中抛出了异常

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ShoppingCart cart = (ShoppingCart)request.getSession().getAttribute("Cart");
    ProductCatalog pc = (ProductCatalog) request.getServletContext().getAttribute("Product Catalog");
    String id = request.getParameter("productID");
    if(id != null){
        Product pr = pc.getProduct(id);
        cart.addItem(pr); // here is null pointer exception
    }
    RequestDispatcher dispatch = request.getRequestDispatcher("shopping-cart.jsp");
    dispatch.forward(request, response);
}
下面是cart类:

私有ConcurrentHashMap项

/** Creates new Shopping Cart */
public ShoppingCart(){
    items = new ConcurrentHashMap<Product, Integer>();
}

/** Adds a product having this id into cart and increases quantity. */
//This method is called after "add to cart" button is clicked. 
public void addItem(Product pr){
    System.out.println(pr.getId() + " sahdhsaihdasihdasihs");
    if(items.containsKey(pr)){
        int quantity = items.get(pr) + 1;
        items.put(pr, quantity);
    } else {
        items.put(pr, 1);
    }
}

/** 
 * Adds a product having this id into cart and 
 * increases quantity with the specified number. 
 * If quantity is zero, we remove this product from cart.
 */
//This method is called many times after "update cart" button is clicked. 
public void updateItem(Product pr, int quantity){
    if(quantity == 0)items.remove(pr);
    else items.put(pr, quantity);
}

/** Cart iterator */
public Iterator<Product> cartItems(){
    return items.keySet().iterator();
}

/** Returns quantity of this product */
public int getQuantity(Product pr){
    return items.get(pr);
}
/**创建新购物车*/
公共购物车(){
items=新的ConcurrentHashMap();
}
/**将具有此id的产品添加到购物车并增加数量*/
//单击“添加到购物车”按钮后调用此方法。
公共无效附加项(产品请购单){
System.out.println(pr.getId()+“sahdhsaihdasihs”);
if(项目。集装箱(请购单)){
整数数量=项目。获取(pr)+1;
物品。放置(请购单、数量);
}否则{
项目。投入产出(pr,1);
}
}
/** 
*将具有此id的产品添加到购物车和
*使用指定的数字增加数量。
*如果数量为零,我们将从购物车中删除此产品。
*/
//单击“更新购物车”按钮后,会多次调用此方法。
公共无效更新项(产品请购单、整数数量){
如果(数量==0)项。删除(pr);
其他项目。放置(请购单、数量);
}
/**购物车迭代器*/
公共迭代器cartItems(){
返回items.keySet().iterator();
}
/**返回此产品的数量*/
公共数量(产品请购单){
返回项目。获取(pr);
}

当您重新启动时,我猜您是在重新提交导致空指针的表单,这可能是在您尝试检索会话或获取购物车属性时发生的。调用cart.addItem时,cart对象为null。

如果在此处引发异常

    cart.addItem(pr);
。。。这是因为
cart
null
。最可能的解释是,此调用返回
null

    request.getSession().getAttribute("Cart");
这将发生,因为会话(尚未)包含
“Cart”
条目。您需要做的是测试调用的结果。如果返回
null
,则需要创建一个新的
ShoppingCart
object,并使用`Session.setAttribute(…)将其添加到会话对象中,以供下一个使用会话的请求使用。

Hi Kote,我们不太担心英语,因为我们缺少代码。我们都说代码:)所以如果你发布它,我们有更好的机会帮助你。祝你好运另外,请单击问题下方的“编辑”,以便将代码添加到问题正文中。我在会话类中有这样一个类:public void sessionCreated(HttpSessionEvent arg0){ShoppingCart=new ShoppingCart();arg0.getSession().setAttribute(“cart”,cart);}为什么这还不够?很有效,谢谢。但是我不明白为什么它第二次返回null,你能把这个标记为正确答案吗。它帮助了我,我相信它会帮助那些偶然发现它的人。