When I run Java servlet first time on server, all web-pages work good and there is no problem. But when I stop the server, restart it and run the servlet again, there is a null pointer exception on one page. I tried to print something, where this error was occurred , but when I write System.out.printl("something") there, and run then again the servlet (restarting server many times) there is no more exception thrown.
Can anyone help to fix this problem?
Here is doPost method where is the exception thrown
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);
}
and here is cart class:
private ConcurrentHashMap items;
/** 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);
}