質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4835閲覧

HTMLとjavaSetvlet間の値の受け渡しについて

totogawa

総合スコア18

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/11/26 07:49

編集2018/11/26 08:30

前提・実現したいこと

htmlで入力した値をjava(servlet)に送り、所定の計算を行った後、jpsファイルに値を送り表示させること。

発生している問題・エラーメッセージ

一回目の実行では正常に処理させるのですが、そこからブラウザバックを行い、再度異なる値を選択し実行すると、前回のままでの表示がされてしまうこと。
例:1回目1と1を選択>servletで計算>1+1=2>jpsファイルで表示(1と1と結果の2)
2回目:ブラウザバックを行う>2と3を選択>servletで計算(?)>jspの表示が1回目と同じ

下記に例のコードを載せますが、これはあくまでも例で、実際にはより多くの計算処理をさせてからjspに表示させることを目標としています。ただし原理原則は同じです。

そして最大の問題は、目標とする構造とシンプルにしたものの同じ構造であるにもかかわらず、この例ではブラウザバックしても正常にservletで計算を行い、jspで表示できているということです。

なぜ例で作ったものが正常に動き、実際に作っているものではできないのかが、皆目見当がつきません。

こうしたらいいのではないのか、これを試したらどうか等何でも構いませんので、ご回答のほどよろしくお願いします。

製作しているソースコード(問題が発生しているもの)

java

1 private static final long serialVersionUID = 1L; 2 3 public Imput_Action() { 4 super(); 5 } 6 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 8 9 } 10 11 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 12 // 各種必要な変数等の定義 13 String bf_gender; 14 String bf_age; 15 String bf_day; 16 17 bf_gender = request.getParameter("num_Gender"); 18 bf_age = request.getParameter("num_Age"); 19 bf_day = request.getParameter("Day_data"); 20 21 num_Gender = Integer.parseInt(bf_gender); 22 num_Age = Integer.parseInt(bf_age); 23 num_Day = Integer.parseInt(bf_day); 24 25 // GA自体の実行部分 26 ALL_FileRead(); 27 Firast_Population(); 28 Satisfaction(); 29 30 for(int generation = 0 ; generation < GENERATION_SIZE ; generation++) { 31 strat(); 32 elite_SRST = Collections.max(SRST); 33 Generation_Elite.add(elite_SRST); 34 35 // 各世代で最大満足度個体を保存 36 for(int i = 0 ; i < SRST.size() ; i++) { 37 double a = SRST.get(i); 38 if(elite_SRST == a) { 39 ArrayList<Integer> ESRN = new ArrayList<>(SNRList.get(i)); 40 ArrayList<Integer> EPRN = new ArrayList<>(); 41 Generation_EliteS.add(ESRN); 42 43 // 競技Noを会場Noに変換 44 for(int y = 0 ; y < ESRN.size() ; y++) { 45 for(int x = 0 ; x < noExchange.length ; x++) { 46 if(noExchange[ESRN.get(y)][x] == 1) { 47 EPRN.add(x); 48 } 49 } 50 } 51 // 会場ルートの先頭にNo,0…JR東京駅を追加 52 EPRN.add(0 , 0); 53 Generation_EliteP.add(EPRN); 54 break; 55 } 56 } 57 } 58 59 // 全世代間で最大満足度の個体を探索。 60 double TOP_ELITE = 0.0; 61 ArrayList<Integer> TOP_ELITE_PROOT = new ArrayList<>(); 62 ArrayList<Integer> TOP_ELITE_SROOT = new ArrayList<>(); 63 int TOP_ELITE_NO = 0; 64 65 TOP_ELITE = Collections.max(Generation_Elite); 66 TOP_ELITE_NO = Generation_Elite.indexOf(TOP_ELITE); 67 TOP_ELITE_SROOT = Generation_EliteS.get(TOP_ELITE_NO); 68 TOP_ELITE_PROOT = Generation_EliteP.get(TOP_ELITE_NO); 69 70 // output.jspに送る際に先頭にダミーを置く。 71 TOP_ELITE_SROOT.add(0 , 1000); 72 TOP_ELITE_PROOT.add(0 , 1000); 73 74 // 競技・会場Noから名前への変換と配列への保存 75 ArrayList<String> result_SNroot = new ArrayList<>(); 76 ArrayList<String> result_PNroot = new ArrayList<>(); 77 78 for(int i = 1 ; i < TOP_ELITE_SROOT.size() ; i++) { 79 String numS = Sname.get(TOP_ELITE_SROOT.get(i)); 80 result_SNroot.add(numS); 81 } 82 83 for(int i = 1 ; i < TOP_ELITE_PROOT.size() ; i++) { 84 String numP = Pname.get(TOP_ELITE_PROOT.get(i)); 85 result_PNroot.add(numP); 86 } 87 88 // output.jspに送る際に先頭と最後尾にダミーを置く。 89 result_SNroot.add(0 , "ダミー"); 90 result_PNroot.add(0 , "ダミー"); 91 result_SNroot.add(result_SNroot.size() , "ダミー"); 92 result_PNroot.add(result_PNroot.size() , "ダミー"); 93 94 // output.jspに各種数値等を送る 95 request.setAttribute("result_Sroot" , TOP_ELITE_SROOT); 96 request.setAttribute("result_Proot" , TOP_ELITE_PROOT); 97 request.setAttribute("result_SNroot" , result_SNroot); 98 request.setAttribute("result_PNroot" , result_PNroot); 99 request.setAttribute("result_Satisfaction" , TOP_ELITE); 100 101 getServletConfig().getServletContext(). 102 getRequestDispatcher("/output-action.jsp").forward(request , response); 103 } 104 105 // GAの流れを構成(フローチャートでいう繰り返しの部分) 106 public void strat() { 107 Selection_R(); 108 crossover2(); 109 mutation(); 110 time_limit(); 111 Satisfaction(); 112**上記のコードは文字数の関係上省略しました。** 113 } 114 115 // HTMLからの使用者の性別年代情報の入力 116 public void User_Choice() { 117 118 // 性別の選択 119 int Gender_data = num_Gender; 120 121 // 男女別の満足度表取り込み 122 switch (Gender_data) { 123 case 0: 124 for (int y = 0; y < 38; y++) { 125 for (int x = 0; x < 6; x++) { 126 GENDER[y][x] = womanSatisfaction[y][x]; 127 } 128 } 129 break; 130 131 case 1: 132 for (int y = 0; y < 38; y++) { 133 for (int x = 0; x < 6; x++) { 134 GENDER[y][x] = manSatisfaction[y][x]; 135 } 136 } 137 break; 138 } 139 140 // 年代を選択 141 int Age_data = num_Age; 142 age = Age_data - 1; 143 for(int x = 0 ; x < GENDER.length ; x++) { 144 AGE[x] = GENDER[x][Age_data]; 145 } 146 147 // 年代の表示 148 switch (num_Age) { 149 case 0: 150 PAge = ("20代"); 151 break; 152 case 1: 153 PAge = ("30代"); 154 break; 155 case 2: 156 PAge = ("40代"); 157 break; 158 case 3: 159 PAge = ("50代"); 160 break; 161 case 4: 162 PAge = ("60代"); 163 break; 164 case 5: 165 PAge = ("70代以上"); 166 break; 167 } 168 169 // 性別の表示 170 switch (num_Gender) { 171 case 0: 172 PGender = ("女性"); 173 break; 174 case 1: 175 PGender = ("男性"); 176 break; 177 } 178 179 // 対象の日程情報を取り出し 180 int Day = num_Day; 181 //各日程の開催競技Noの読み込み 182 for(int x = 0 ; x < dayHolding.length ; x++) { 183 if(dayHolding[Day][x] == 1) { 184 DH.add(x); 185 } 186 } 187 } 188}

html

1**form部分のみ掲載します** 2<form method = "post" action = "/imput-test/Imput_Action" onSubmit = "return check()"> 3 4<h2><label for="GENDER">~~性別を教えてください~~</label></h2> 5 6<div class="table"> 7<table border="1" align="center"> 8<tr> 9<th id="man-table">男性</th> 10 11<th id="woman-table">女性</th> 12</tr> 13 14<tr> 15<td id="man-table"> 16<div class="select-gender" > 17<input id="man" type="radio" name="num_Gender" value="1"> 18<label for="man"> 19<img src="img/man.jpg" width="150px" height="150px" alt="エラー"> 20</label> 21</div> 22</td> 23 24<td id="woman-table"> 25<div class="select-gender"> 26<input id="woman" type="radio" name="num_Gender" value="0"> 27<label for="woman"> 28<img src="img/woman.jpg" width="150px" height="150px" alt="エラー"> 29</label> 30</div> 31 32</td> 33</tr> 34</table> 35</div> 36 37<h2><label for="AGE">~~年代を教えてください~~</label></h2> 38 39<select name="num_Age" style="font-size:100% ; border:0.5px"> 40<option value="0">20代</option> 41<option value="1">30代</option> 42<option value="2">40代</option> 43<option value="3">50代</option> 44<option value="4">60代</option> 45<option value="5">70代以上</option> 46</select> 47 48<h2><label for="DAY">~~調べたい日程を教えてください~~</label></h2> 49 50<select name="Day_data" style="font-size:100% ; border:0.5px"> 51<option value="0">1日目</option> 52<option value="1">2日目</option> 53<option value="2">3日目</option> 54<option value="3">4日目</option> 55<option value="4">5日目</option> 56<option value="5">6日目</option> 57<option value="6">7日目</option> 58<option value="7">8日目</option> 59<option value="8">9日目</option> 60<option value="9">10日目</option> 61<option value="10">11日目</option> 62<option value="11">12日目</option> 63<option value="12">13日目</option> 64<option value="13">14日目</option> 65<option value="14">15日目</option> 66<option value="15">16日目</option> 67<option value="16">17日目</option> 68</select> 69 70<p><input type = "submit" value = "情報をサーブレットに送信"> 71<input type = "reset" value = "入力した情報をリセットする"> 72</p> 73 74<script>function check(){ 75 num_Gender = 0 ; 76 num_Age = 0 ; 77 Day_data = 0 ; 78 if(window.confirm("送信してよろしいですか?")){ 79 return true; 80 } 81 else{ 82 window.alert("キャンセルしました\n再度入力してください"); 83 return false; 84 } 85}</script> 86</form>

jsp

1**script部分のみ掲載します** 2<script type="text/javascript"> 3 SNnum = new Array; 4 Sport_Name_Root = new Array; 5 var SNroot = '<%=request.getAttribute("result_SNroot")%>'; 6 SNnum = SNroot.split(","); 7 for(var i = 1 ; i < SNnum.length-1 ; i++){ 8 Sport_Name_Root[i] = SNnum[i]; 9 document.write(i + "番目…" + Sport_Name_Root[i] + "<br>"); 10 } 11 document.write("~~finish~~"); 12</script> 13</div> 14 15<div class="public_root"> 16<h2>~~会場ルート~~</h2> 17<script type="text/javascript"> 18 Pnum = new Array; 19 Public_No_Root = new Array; 20 var Proot = '<%=request.getAttribute("result_Proot")%>'; 21 Pnum = Proot.split(","); 22 for(var i = 1 ; i < Pnum.length ; i++){ 23 Public_No_Root[i] = parseInt(Pnum[i]); 24 } 25 document.write("finish" + "<br>"); 26 27 PNnum = new Array; 28 Public_Name_Root = new Array; 29 var PNroot = '<%=request.getAttribute("result_PNroot")%>'; 30 PNnum = PNroot.split(","); 31 for(var i = 1 ; i < PNnum.length-1 ; i++){ 32 Public_Name_Root[i] = PNnum[i]; 33 document.write(i + "番目…" + Public_Name_Root[i]); 34 document.write('<center>'); 35 document.write(point[ Public_No_Root[i] ]); 36 document.write('</center>'); 37 } 38 document.write("~~finish~~"); 39</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/11/26 07:56

サーバー側の言語を使う場合って基本的にブラウザバックの動作は保証しないものではあります。キャッシュとかで想定通りに動かせないことありますしね。jspにリンク貼って戻らせるのが通常のやり方かと。
totogawa

2018/11/26 07:59

では、その画面ではブラウザバックをさせない代わりに、何らかの方法で最初の画面(数値を決める画面)に飛ばすということでしょうか?間違っていたら遠慮なくご指摘お願いします。
m.ts10806

2018/11/26 08:02

コメントの最後に書いてます。「ブラウザバック禁止」は完全にはできないのであくまで「ブラウザバックして誤動作しても知らん」というスタンスです。画面に設置されたボタンやリンクなどの作った側が提供する機能以外は動作保証するのは難しいので。
totogawa

2018/11/26 08:33

回答ありがとうございます。試してみましたが、結果はダメでした。文字数の関係上、今回の質問では要らないところは削除していますが、実際に質問内容の問題が起きているものを載せました。よろしければご回答お願い致します。
m.ts10806

2018/11/26 08:35

「ダメだった」だけだと何をどうしてどうなったか分からないので具体的に記載いただきたいところではあるのですが(こちらの意図通りのことを試したかわかりませんし)、そもそもJavaScriptでhtmlをwriteしてるのはなぜでしょうか?
totogawa

2018/11/26 08:45

「ダメだった」の具体的な内容について…質問内容の解決の手段として、提案していただいた方法。つまりリンクを新たに製作。そこから数値の入力画面へと戻る方法を取りました。実際に動かした結果1回目は正常に成功。そこからリンクから最初の画面に戻り2回目を1回目とは異なる数値で実行。しかし1回目と全く同じ結果が表示させていました。
totogawa

2018/11/26 08:48

javascriptでhtmlをwriteしている理由について…htmlで入力した数値をservletに送り再びhtmlと同じ形で表示できることが目標でした。それを実現するために模索していた中で見つけた方法がこの方法でした。自分自身勉強しながらの製作のため知識不足であることは事実です。別の方法が在りましたら、是非ともご教授いただければ幸いです。
guest

回答1

0

ベストアンサー

「ブラウザの戻る」を使ったとしても、サーブレットへ送信されるパラメータは送信時に入力された値に必ずなります。
それでも変化しない場合は、それは正しく受け取れていないか、同じ名前のパラメータを送信しているか、ないしは他の処理で上書きしているのではないでしょうか。

IntelliJやEclipseのようなIDEを使ってデバッグモードで起動し、変数が正しく格納されているのかを確かめるのが良いでしょう。

投稿2018/11/26 12:08

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問