サーバーで初めてJavaサーブレットを実行すると、すべてのWebページが正常に動作し、問題はありません。しかし、サーバーを停止して再起動してサーブレットを再実行すると、1ページにNULLポインタ例外があります。私はこのエラーが発生したところで何かを印刷しようとしましたが、そこにSystem.out.printl("something")
と書き込んでサーブレット(何度もサーバを再起動します)をもう一度実行すると、それ以上の例外はスローされません。JavaサーバーでのWebプログラミング、NULLポインタ例外
誰でもこの問題を解決できますか?ここで
は、例外が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);
}
を投げているdoPostメソッドであり、ここで、カートクラスです:
プライベートConcurrentHashMapのアイテム。あなたは私はあなたがNULLポインタを引き起こしているフォームを再送信している推測して再起動するときは、カート属性を取得するときに、セッションを取得しようとする場合、または、これはどちらか起こっている
/** 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);
}
こんにちは、私たちはコードが不足しているので、英語をあまり心配していません。私たちはすべてコードを発言しています:)あなたがそれを投稿すれば、私たちはあなたを助ける良い機会を得ます。がんばろう! P.S.質問の下に**編集**をクリックすると、質問の本文にコードを追加できます。 – jmort253
:)ありがとう、私はコードを追加しました – Kote