サーブレット
////////////////////////////////////////////////////////////////////////////////
//  << sv144.java >>
//
// サーブレット(6):セッション管理(応用 買い物かご)
//
//   果物の購入、返却、買い物かごの表示を行う。
//
// ●起動法
//  (1)Javaファイル(sv144.java)をコンパイルし、classファイル(sv144.class)を
//    作成する。
//       ただし、Javaファイル(sv144.java)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv144.java
//     classファイル(sv144.class)は、
//       %CATALINA_HOME%\webapps\SV\WEB-INF\classes\sv144.class
//       に保存する。
//    (2)入力フォームで、
//         URL(http://localhost:8080/SV/servlet/sv144)
//       を指定する。
//
////////////////////////////////////////////////////////////////////////////////

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class sv144 extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response)
                     throws ServletException,IOException {

    // セッションの取得。
    HttpSession hs = request.getSession(true);

    // セッションの属性(FRUITS)を取得。
    ArrayList a = (ArrayList)hs.getAttribute("FRUITS");
    if( a == null ) { a = new ArrayList(); }

    // フォームのデータを取得。
    request.setCharacterEncoding("JISAutoDetect"); 
    String s1[] = request.getParameterValues("f1");
    String s2 = request.getParameter("f2");

    // コンテンツタイプの指定。
    response.setContentType("text/html; charset=Shift_JIS");

    // HTML文書の出力。
    PrintWriter pw = response.getWriter();
    pw.println("<html>"                                    
          + "<head><title>サーブレット</title></head>"  
          + "<body>"
          + "<form action=http://localhost:8080/SV/servlet/sv144 method=POST>"
          + "<h2>くだもの屋</h2>"
          + "複数の項目を選択するときは、Ctrlキーを押しながら選択する<br>"
          + "<select name=f1 size=5 multiple>"
          + "<option value=みかん >みかん"
          + "<option value=りんご >りんご"
          + "<option value=すいか >すいか"
          + "<option value=なし >なし"
          + "<option value=いちご >いちご"
          + "</select>"
          + "<input type=submit name=f2 value=入れる>"
          + "<input type=submit name=f2 value=戻す><br>"
          + "<input type=submit name=f2 value=買い物かご表示><br>"
          + "</form>");

    if( (s1 != null)&&(s2 != null) ) {
      // 購入手続きを行い、セッションに設定。
      if( "入れる".equals(s2) ) { 
        for( int i=0; i<s1.length; i++ ) { a.add(s1[i]); }
        hs.setAttribute("FRUITS", a);
        pw.println("買い物かごに入れました<br>");
      }                                    

      // 返却手続きを行い、セッションに設定。
      if( "戻す".equals(s2) ) { 
        for( int i=0; i<s1.length; i++ ) {
          for( int j=0; j<a.size(); j++ ) {
            if( ((String)a.get(j)).equals(s1[i]) ) { a.remove(j); break; }
          }
        } 
        hs.setAttribute("FRUITS", a);
        pw.println("買い物かごから戻しました<br>");
      }
    }

    if( "買い物かご表示".equals(s2) ) { 
      // 買い物かごを表示する。
      // セッションの属性(FRUITS)を取得。
      pw.println("買い物かごの表示(" + a.size() + "個)<br>"); 
      for( int i=0; i<a.size(); i++ ) { 
        pw.println((i+1) + ": " + a.get(i) + "<br>");
      }
    }

    pw.println("</body>"   
             + "</html>"); 
  }
}
入力フォーム
<form action=http://localhost:8080/SV/servlet/sv144 method=POST>
  <input type=submit value=実行>
</form>
実行結果

実行後




入れるをクリック後




戻すをクリック後


買い物かご表示をクリック後