質問編集履歴

1 詳しい説明とファイルのコードを張りました。

yamanoharu0129

yamanoharu0129 score 47

2016/08/06 15:39  投稿

aタグをクリックしてsessionの中身を消したい
jspの
<a herf="cart?action=clear"><button>クリア</button></a>
でdoGETでcart(sessionで作ったhashmap)の中身を消し、同じページに戻りたいのですが、クリアを押すと404エラーが出ます。
単に、session.removeAttribute("clear");
だけではいけないのはわかるのですが、何をどう付け加えればいいのかわかりません。
御教授お願いします。
御教授お願いします。
修正します。
同一のjspのformからキーと値を入力して、POSTで送ってhashmapのcartに登録して、現在のカート内容のdiv内に表示しています。クリアボタンを押すcartの中身が削除されて、下記のtable内の値の表示が消えるようにしたいです。
関係性ですが、サーブレットでの処理はすべて同じサーブレット内で行い。フォームからの入力、表示、クリアボタンもshow.jsp内にあります。
show.jpのフォームからPOSTでdoPOST内でsessionでhashmap内に名前と個数を登録します。
登録した情報をカートの内容の部分に追加していきます。クリアのボタンを押すとcart内の値をすべて削除し、show.jspのカート内容の部分が消えるようにしたいです。処理はこのCart.javaとshow.jspだけで行っています。
Cart.java
```import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Cart
*/
@WebServlet("/Cart")
public class Cart extends HttpServlet {
   private static final long serialVersionUID = 1L;
   /**
    * @see HttpServlet#HttpServlet()
    */
   public Cart() {
       super();
       // TODO Auto-generated constructor stub
   }
   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       getServletContext().getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response);
       HttpSession session = request.getSession();
       HashMap<String,Integer> cart = (HashMap<String,Integer>)session.getAttribute("cart");//保持されてる値を持ってきている
       if(cart == null){//マップが作られていなかったらマップを作る
           cart = new HashMap();
       };
       session.removeAttribute("cart");
       //getServletContext().getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response);
   }
   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.setCharacterEncoding("utf-8");
       String name = request.getParameter("name");
       String countString = request.getParameter("count");
       Integer count = Integer.valueOf(countString);
       HttpSession session = request.getSession();
       HashMap<String,Integer> cart = (HashMap<String,Integer>)session.getAttribute("cart");//保持されてる値を持ってきている
       if(cart == null){//マップが作られていなかったらマップを作る
           cart = new HashMap();
       };
       //名前(key)が登録されていなかったら、マップにそのまま名前と個数を登録
       //名前が登録していたら、値をプラスする
       if(!(cart.containsKey(name))){//同じ名前のKeyがなければ実行
           //get(name)はname(key)に対応する値(count)を求める
           System.out.println("名前:"+name+" 個数:"+count);
           cart.put(name,count);//名前と個数を登録
       }else{//同じ名前のKeyがあった時に実行
           System.out.println("名前:"+name+" 入力個数:"+count+" 合計:"+(count+cart.get(name)));
           cart.put(name,count+cart.get(name));
       };
       System.out.println("cart.keySet():"+cart.keySet());
       System.out.println("cart.get(name"+cart.get(count));
       for (String str : cart.keySet()) {
             System.out.println(str + ":" + cart.get(str));
           }
       session.setAttribute("cart", cart);
       getServletContext().getRequestDispatcher("/WEB-INF/show.jsp").forward(request,response);
   }
}
```
show.jsp
```<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@ page import="java.util.HashMap" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ショッピングカート</title>
</head>
<body>
   <div style="border:#000000 solid 1px;">
   <form action="Cart" method="POST">
   <table>
       <tr><td>名前:</td><td><input type="text" name="name" value="ごはん"></td><td></td></tr>
       <tr><td>個数:</td><td><input type="text" name="count" value="1"></td><td></td></tr>
       <tr><td></td><td></td><td><button>更新</button></td></tr>
   </table>
   </form>
   </div>
   <br>
   <div style="border:#000000 solid 1px;">
    <table>
       <% HashMap<String,Integer> cart = (HashMap<String,Integer>)session.getAttribute("cart"); %>
       <thead><tr><td>現在のカートの内容</td></tr></thead>
       <tbody>
       <% if(cart != null){
           for(String name : cart.keySet()){
           %>
                   <tr><td bgcolor="#00bfff"><%= name %></td><td><%= cart.get(name) %></td><td></td></tr>
       <% }
           };%>
       </tbody>
   </table>
       <a href="cart?action=cart">
       <button>カートをクリア</button></a>
   </div>
</body>
</html>
```
  • Java

    20552 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • JSP

    1388 questions

    JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

  • Tomcat

    777 questions

    TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る