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

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

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

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

Java

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

servlet

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

Q&A

解決済

1回答

401閲覧

java Servlet において正常に処理が行われていない。

totogawa

総合スコア18

Java EE

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

Java

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

servlet

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

0グッド

0クリップ

投稿2018/11/26 17:46

編集2018/11/27 00:23

前提・実現したいこと

htmlから任意に入力した情報をもとに、java Servletで所定の計算を行った後、その結果を表示させること。
これを繰り返し実行できるようにすること。

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

htmlにおいて所定の値(num_gender , num_age , num_dayの3つ)をjava Servletに渡し、これをもとに所定の計算を行った後、結果を表示させるととを目標としています。
tomcatを起動して初めの1回目は正常に動くのですが、そこから再び所定の値を入れなおして実行することができません。

所定の値自体はServletに送られているのですが、その後の処理が2回目以降行ってくれません。

該当のソースコード

java

1package imput_action; 2 3/** 4 * Servlet implementation class GA 5 */ 6@WebServlet("/Imput_Action") 7public class Imput_Action extends HttpServlet { 8 private static final long serialVersionUID = 1L; 9 10 /** 11 * @see HttpServlet#HttpServlet() 12 */ 13 14 // 初期個体数の指定 15 int Population = 10; 16 17 // 世代数 18 int GENERATION_SIZE = 3; 19 20 int num_Gender = 0 ; 21 int num_Age = 0 ; 22 int num_Day = 0 ; 23 24 // 各種入力データの取り扱い用変数の定義 25 int Day = 0; 26 int gender = 0; 27 int age = 0; 28 29 public Imput_Action() { 30 super(); 31 // TODO Auto-generated constructor stub 32 } 33 34 /** 35 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 36 */ 37 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 38 // TODO Auto-generated method stub 39// response.getWriter().append("Served at: ").append(request.getContextPath()); 40 } 41 42 /** 43 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 44 */ 45 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 46 // TODO Auto-generated method stub 47 // 各種必要な変数等の定義 48 String bf_gender; 49 String bf_age; 50 String bf_day; 51 52 int gender = 0 ; 53 int age = 0 ; 54 int day = 0 ; 55 56 bf_gender = request.getParameter("num_Gender"); 57 bf_age = request.getParameter("num_Age"); 58 bf_day = request.getParameter("num_Day"); 59 60 gender = Integer.parseInt(bf_gender); 61 age = Integer.parseInt(bf_age); 62 day = Integer.parseInt(bf_day); 63 64 num_Gender = gender ; 65 num_Age = age ; 66 num_Day = day ; 67 68 /* 69 System.out.println(num_Gender); 70 System.out.println(num_Age); 71 System.out.println(num_Day); 72 */ 73 // GA自体の実行部分 74 ALL_FileRead(); 75 Firast_Population(); 76 Satisfaction(); 77 78 for(int generation = 0 ; generation < GENERATION_SIZE ; generation++) { 79 // System.out.println("~~~~~第" + (generation+1) + "世代~~~~~"); 80 strat(); 81 elite_SRST = Collections.max(SRST); 82 Generation_Elite.add(elite_SRST); 83 84 // 各世代で最大満足度個体を保存 85 for(int i = 0 ; i < SRST.size() ; i++) { 86 double a = SRST.get(i); 87 if(elite_SRST == a) { 88 ArrayList<Integer> ESRN = new ArrayList<>(SNRList.get(i)); 89 ArrayList<Integer> EPRN = new ArrayList<>(); 90 Generation_EliteS.add(ESRN); 91 92 // 競技Noを会場Noに変換 93 for(int y = 0 ; y < ESRN.size() ; y++) { 94 for(int x = 0 ; x < noExchange.length ; x++) { 95 if(noExchange[ESRN.get(y)][x] == 1) { 96 EPRN.add(x); 97 } 98 } 99 } 100 Generation_EliteP.add(EPRN); 101 break; 102 } 103 } 104 } 105 106 // 全世代間で最大満足度の個体を探索。 107 double TOP_ELITE = 0.0; 108 ArrayList<Integer> TOP_ELITE_PROOT = new ArrayList<>(); 109 ArrayList<Integer> TOP_ELITE_SROOT = new ArrayList<>(); 110 int TOP_ELITE_NO = 0; 111 112 TOP_ELITE = Collections.max(Generation_Elite); 113 TOP_ELITE_NO = Generation_Elite.indexOf(TOP_ELITE); 114 TOP_ELITE_SROOT = Generation_EliteS.get(TOP_ELITE_NO); 115 TOP_ELITE_PROOT = Generation_EliteP.get(TOP_ELITE_NO); 116 117 // output.jspに送る際に先頭にダミーを置く。 118 TOP_ELITE_SROOT.add(0 , 114); 119 TOP_ELITE_PROOT.add(0 , 514); 120 121 // 競技・会場Noから名前への変換と配列への保存 122 ArrayList<String> result_SNroot = new ArrayList<>(); 123 ArrayList<String> result_PNroot = new ArrayList<>(); 124 125 for(int i = 1 ; i < TOP_ELITE_SROOT.size() ; i++) { 126 String numS = Sname.get(TOP_ELITE_SROOT.get(i)); 127 result_SNroot.add(numS); 128 } 129 130 for(int i = 1 ; i < TOP_ELITE_PROOT.size() ; i++) { 131 String numP = Pname.get(TOP_ELITE_PROOT.get(i)); 132 result_PNroot.add(numP); 133 } 134 135 // output.jspに送る際に先頭と最後尾にダミーを置く。 136 result_SNroot.add(0 , "ダミー"); 137 result_PNroot.add(0 , "ダミー"); 138 result_SNroot.add(result_SNroot.size() , "ダミー"); 139 result_PNroot.add(result_PNroot.size() , "ダミー"); 140 141 // output.jspに各種数値等を送る 142 request.setAttribute("result_Sroot" , TOP_ELITE_SROOT); 143 request.setAttribute("result_Proot" , TOP_ELITE_PROOT); 144 request.setAttribute("result_SNroot" , result_SNroot); 145 request.setAttribute("result_PNroot" , result_PNroot); 146 request.setAttribute("result_Satisfaction" , TOP_ELITE); 147 request.setAttribute("num_Age" , age); 148 request.setAttribute("num_Gender" , gender); 149 request.setAttribute("num_Day" , day); 150 151 getServletConfig().getServletContext(). 152 getRequestDispatcher("/output-action.jsp").forward(request , response); 153 } 154 155 156 // GAの流れを構成 157 public void strat() { 158 Selection_R(); 159 crossover2(); 160 mutation(); 161 time_limit(); 162 Satisfaction(); 163 } 164 165 // HTMLからの使用者の性別年代情報の入力 166 public void User_Choice() { 167 168 // 性別の選択 169 170 // 男女別の満足度表取り込み 171 switch (num_Gender) { 172 case 0: 173 for (int y = 0; y < 38; y++) { 174 for (int x = 0; x < 6; x++) { 175 GENDER[y][x] = womanSatisfaction[y][x]; 176 } 177 } 178 break; 179 180 case 1: 181 for (int y = 0; y < 38; y++) { 182 for (int x = 0; x < 6; x++) { 183 GENDER[y][x] = manSatisfaction[y][x]; 184 } 185 } 186 break; 187 } 188 189 // 年代を選択 190 for(int x = 0 ; x < GENDER.length ; x++) { 191 AGE[x] = GENDER[x][num_Age]; 192 } 193 194 // 対象の日程情報を取り出し 195 //各日程の開催競技Noの読み込み 196 for(int x = 0 ; x < dayHolding.length ; x++) { 197 if(dayHolding[num_Day][x] == 1) { 198 DH.add(x); 199 } 200 } 201 } 202 203 // 最初期の個体を生成(制約条件内で) 204 public void Firast_Population() { 205 // 入力情報等の取り込み 206 User_Choice(); 207**文字数の関係上、処理内容は削除します。** 208 } 209 210 // 選択した性別・年代での満足度の計算 211 public void Satisfaction() { 212**文字数の関係上、処理内容は削除します。** 213 } 214 215 // 選択の実施(エリート選択で選択した以外の個体でルーレット選択) 216 public void Selection_R() { 217**文字数の関係上、処理内容は削除します。** 218 } 219 220 // 突然変異確率のもと、突然変異を行う(入替) 221 public void mutation() { 222**文字数の関係上、処理内容は削除します。** 223 } 224 225 // 制約条件の計算 226 public void time_limit() { 227**文字数の関係上、処理内容は削除します。** 228 } 229 230 // CSVファイルを全て取り込み 231 public void ALL_FileRead() { 232 FileRead_DH(); 233 FileRead_PD(); 234 FileRead_MSF(); 235 FileRead_WSF(); 236 FileRead_EC(); 237 FileRead_SName(); 238 FileRead_PName(); 239 FileRead_TL(); 240 FileRead_SF(); 241 FileRead_MP(); 242 } 243 244 // 各種CSVファイルの読み込み 245 public void FileRead_DH() { 246**文字数の関係上、処理内容は削除します。** 247 } 248 public void FileRead_PD() { 249**文字数の関係上、処理内容は削除します。** 250 } 251 public void FileRead_MSF() { 252**文字数の関係上、処理内容は削除します。** 253 } 254 public void FileRead_WSF() { 255**文字数の関係上、処理内容は削除します。** 256 } 257 public void FileRead_EC() { 258**文字数の関係上、処理内容は削除します。** 259 } 260 public void FileRead_SName() { 261**文字数の関係上、処理内容は削除します。** 262 } 263 public void FileRead_PName() { 264**文字数の関係上、処理内容は削除します。** 265 } 266 public void FileRead_SWT() { 267**文字数の関係上、処理内容は削除します。** 268 } 269 public void FileRead_TL() { 270**文字数の関係上、処理内容は削除します。** 271 } 272 public void FileRead_SF() { 273**文字数の関係上、処理内容は削除します。** 274 } 275 public void FileRead_MP() { 276**文字数の関係上、処理内容は削除します。** 277 } 278}

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<!-- スタイルシート --> 6<link rel="stylesheet" href="css/stylesheet.css"> 7<title></title> 8</head> 9 10<body> 11<div class="name"> 12<h1>東京オリンピックのルートを調べよう‼</h1> 13<p>~遺伝的アルゴリズムで最適なルートを探索しよう~</p> 14</div> 15 16<h1>下記の情報を入力すると探索ができます!!</h1> 17<form method = "post" action = "../imput-test/Imput_Action" onSubmit = "return check()"> 18<h2><label for="GENDER">~~性別を教えてください~~</label></h2> 19 20<select name="num_Gender" style="font-size:100% ; border:0.5px"> 21<option value="0">女性</option> 22<option value="1">男性</option> 23</select> 24 25<h2><label for="AGE">~~年代を教えてください~~</label></h2> 26<select name="num_Age" style="font-size:100% ; border:0.5px"> 27<option value="0">20代</option> 28<option value="1">30代</option> 29<option value="2">40代</option> 30<option value="3">50代</option> 31<option value="4">60代</option> 32<option value="5">70代以上</option> 33</select> 34 35<h2><label for="DAY">~~調べたい日程を教えてください~~</label></h2> 36<select name="num_Day" style="font-size:100% ; border:0.5px"> 37<option value="0">1日目</option> 38<option value="1">2日目</option> 39<option value="2">3日目</option> 40<option value="3">4日目</option> 41<option value="4">5日目</option> 42<option value="5">6日目</option> 43<option value="6">7日目</option> 44<option value="7">8日目</option> 45<option value="8">9日目</option> 46<option value="9">10日目</option> 47<option value="10">11日目</option> 48<option value="11">12日目</option> 49<option value="12">13日目</option> 50<option value="13">14日目</option> 51<option value="14">15日目</option> 52<option value="15">16日目</option> 53<option value="16">17日目</option> 54</select> 55 56<p><input type = "submit" value = "情報をサーブレットに送信"> 57<input type = "reset" value = "入力した情報をリセットする"> 58</p> 59</form> 60 61</body> 62</html>

文字数の関係上、処理の具体的な内容については省略しましたが、所定の情報の3つを直接使用するところは残しました。
省略部分は、それ以外を使用した各種計算処理だと考えていただければ間違えではないと思います。

まとめ

htmlとServlet間の値の受け渡しはできている。
tomcat(サーバー)を起動して初めの処理は正常に動く。
ただし、戻って再び処理を行おうとすると、Servlet内の「// GA自体の実行部分」以下が動かない模様(これはあくまで推測です)
上記の問題点を解決し、複数回戻っても正常に処理が行えることを目標としている。

不明な点等御座いましたら、何なりとお申し付けください。
ご回答よろしくお願いします。

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

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

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

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

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

kaputaros

2018/11/27 00:19

HTML側のソースはどのようになってるのでしょうか?また、tomcatのバージョン等でターゲットの指定方法が変わってくると思うので、使用しているjavaやtomcatのバージョンを記載するといいと思います。
totogawa

2018/11/27 00:28

Javaのバージョンは10.0.1です。tomcatのバージョンは、7.0で行っています。
wwbQzhMkhhgEmhU

2018/11/27 10:01

デバッガを使えるようになりましょう
guest

回答1

0

ベストアンサー

お疲れさまです。回答ではありません。
ソースコードが掲載されていますが、スキルがないので良くわかりません。
私なら、
「htmlとServlet間の値の受け渡しはできている。tomcat(サーバー)を起動して初めの処理は正常に動く。」とありますが、protected void doPost()で何も計算しないでダミーデータを返す処理を書いて、htmlとServlet間の通信が繰り返しできるのかどうか確認する。
これができるのであれば、次はソースコードのprotected void doPost()を細かく分けて、思った値が帰るか確認するしかないと思います。
ご自身が「Servlet内の「// GA自体の実行部分」以下が動かない模様(これはあくまで推測です)」と記載していますが、この部分でエラーとなる値が返っていないか確認するのが近道だと思います。

投稿2018/11/27 13:02

編集2018/11/27 13:08
senior_golfer

総合スコア264

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問