テキストボックスに入力された文字列が入力フォームの下に追記されて表示されるプログラムをサーブレットファイルのみで作成しています。
入力した文字列をブラウザごとに独立させて動かすため、HttpSessionを使って実装をしているのですが、2つのブラウザで連動してしまいます。
getSessionメソッドを使用すれば新しいセッションIDを生成するようですが、文字列入力後のsubmit時に別ブラウザで入力された内容が反映されてしまいます。getIdメソッドを使ってセッションIDを取得すればもしかして、、とも思いましたが改善しませんでした。
標題のように別ブラウザで入力した内容はsubmit時に反映しないようにしたいです。
下記はサーブレットのコードになります。
servlet
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // ヘッダに出力形式をセット 3 response.setContentType("text/html; charset = UTF-8"); 4 5 // 出力ストリームを作成 6 PrintWriter out = response.getWriter(); 7 8 request.setCharacterEncoding("UTF-8"); 9 10 // セッションからすでに表示されたデータを取得 11 HttpSession session = request.getSession(); 12 ArrayList<String> al = (ArrayList<String>)session.getAttribute("Data"); 13 14 if( al == null ) { 15 al = new ArrayList<String>(); 16 session.setAttribute("Data", al); 17 } 18 19 // テキストボックスからデータを受け取る 20 String input = request.getParameter("param"); 21 22 al.add(input); 23 24 // HTML文を出力 25 out.println("<html><head>"); 26 out.println("<meta charset=\"UTF-8\">"); 27 out.println("<title>SrvletTest</title>"); 28 out.println("</head>"); 29 out.println("<body>"); 30 out.println( "<form method=\"POST\" action=\"B26_HelloWeb\">" ); 31 out.println("<input type = \"text\" name = \"param\" maxlength = 20>"); 32 out.println("<input type = \"submit\"><br>"); 33 34 for(int i = 0; i < al.size(); i++) { 35 out.println("<p>"+ al.get(i) + "</p>"); 36 } 37 out.println("</form>"); 38 out.println("</body></html>"); 39 out.close(); 40 41 } 42
以上、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/02 04:38
2020/11/02 07:52
2020/11/02 08:24