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

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

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

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

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

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

Q&A

解決済

1回答

7608閲覧

JSPで乱数を使用したい

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

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

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

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

0グッド

1クリップ

投稿2016/05/05 03:59

###前提・実現したいこと
JSPで乱数を使おうと考えています。
ツールはeclipse Version: Mars.2 Release (4.5.2)を使用しています。

JSPページにて乱数を2つ表示し、それらを足した答えを
テキストボックスに入力してもらい、答え合わせをするプログラムです。
もし未入力だった場合には、エラーにせず同じ問題画面をもう一度
表示したいと考えています。
未入力のとき、JSP⇒サーブレット⇒JSPと遷移すると
乱数が再生生成され、問題が変わってしまいます。

ここを変えずに、未入力の場合には同じ問題を出題し、
テキストボックス欄に何かしら入力されていれば
別の問題へ移るというプログラムを作りたいです。

いくらか調べてみたのですが、理解できなかったのでご質問させていただきました。

###該当のソースコード

Java

1''''JSP'''''''''''''''''''''''''' 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5<html> 6<head> 7<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 8<title>足し算演算ゲーム</title> 9</head> 10<!-- JavaBeansオブジェクトを生成 --> 11> 12<jsp:useBean id="addbean" class="addBean.AddBean" scope="session" /> 13<jsp:useBean id="ransuu" class="addBean.AddBean" scope="page"/> 14 <body> 15 ######################################################################## 16 <br> 17 <font size="5">足し算演習ゲーム</font> 18 <br> 19 <br> 20 21 <table border="1" width="100%"> 22 <tr> 23 <%-- requestスコープを持つ、JavaBeansオブジェクトaddbeanを 24 通して、JavaBeansに保存されたデータを参照します。 --%> 25 <td align="center">残り<jsp:getProperty name="addbean" 26 property="times" />27 <td align="right"><jsp:getProperty name="addbean" 28 property="userName" /></td> 29 </tr> 30 </table> 31 計算問題 32 <br> 33 <%=ransuu.getRan1()%> 34 + 35 <%=ransuu.getRan2()%> 36 = 37 <form method="GET" action="./AddAnswerServlet"> 38 <input type="text" name="answer"> <input type="submit" 39 name="nextButton" value="決定して次へ"> 40 </form> 41 </body></html> 42```'''''''''''''''''''''''' 43''''サーブレット''''''''''''''''''''''''''''''''''''''''''''''''''''''' 44package addServlet; 45 46import java.io.IOException; 47 48import javax.servlet.RequestDispatcher; 49import javax.servlet.ServletException; 50import javax.servlet.annotation.WebServlet; 51import javax.servlet.http.HttpServlet; 52import javax.servlet.http.HttpServletRequest; 53import javax.servlet.http.HttpServletResponse; 54import javax.servlet.http.HttpSession; 55 56import addBean.AddBean; 57 58/** 59 * Servlet implementation class AnswerServlet 60 */ 61@WebServlet("/AddAnswerServlet") 62public class AddAnswerServlet extends HttpServlet { 63 private static final long serialVersionUID = 1L; 64 private static int sum = 0; 65 String forward = null; 66 67 /** 68 * @see HttpServlet#HttpServlet() 69 */ 70 public AddAnswerServlet() { 71 super(); 72 // TODO Auto-generated constructor stub 73 } 74 75 /** 76 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 77 * response) 78 */ 79 protected void doGet(HttpServletRequest request, HttpServletResponse response) 80 throws ServletException, IOException { 81 try{ 82 AddBean addbean; 83 HttpSession session = request.getSession(); 84 85 addbean = (AddBean) session.getAttribute("addbean"); 86 if (addbean == null) { 87 forward = "/jsp.add.error/addErrorSession.jsp"; 88 } 89 90 // 正しい答えを呼び出す 91 int result = addbean.getResult(); 92 93 // 正誤チェック 94 // AddBeanから計算に用いられる二つの数値を呼ぶ 95 // それらを足し合わせた計算結果が回答とあっているか確かめる 96 // あっていれば、正解数カウント+1 97 // 間違っていれば正解数カウント+0 98 String strAnswer = request.getParameter("answer"); 99 if (strAnswer != null) { 100 int answer = Integer.parseInt(strAnswer); 101 if (answer == result) { 102 sum++; 103 addbean.setSum(sum); 104 } else { 105 } 106 } 107 // 問題数分回す 108 // AddBeanから問題数を取得する 109 // times>0ならもう一度問題画面へ 110 // times==0なら、計算結果画面へ 111 // timesに入力された値が上2つ以外のものであれば、エラー画面へ 112 113 int times = addbean.getTimes(); 114 if(times>0){ 115 forward = "/jsp.add/addAnswer.jsp"; 116 times--; 117 addbean.setTimes(times); 118 }else if(times==0){ 119 forward = "/jsp.add/addResult.jsp"; 120 }else{ 121 forward = "/jsp.add.error/addErrorNumberOutOfRange.jsp"; 122 } 123 124 }catch(Exception e){ 125 forward = "/jsp.add/addAnswer.jsp"; 126 }finally{ 127 RequestDispatcher dispatcher = request.getRequestDispatcher(forward); 128 dispatcher.forward(request, response); 129 } 130 } 131 132 /** 133 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 134 * response) 135 */ 136 protected void doPost(HttpServletRequest request, HttpServletResponse response) 137 throws ServletException, IOException { 138 // TODO Auto-generated method stub 139 doGet(request, response); 140 } 141 142} 143''''''''''''''''''''''''''''''''''''''''''''''''''''' 144''''JavaBeans'''''''''''''''''''''''''''''' 145package addBean; 146 147import java.util.Random; 148 149public class AddBean { 150 151 private String userName=null; 152 153 private String userPassword=null; 154 155 private int times; 156 157 Random rnd = new Random(); 158 private int ran1 = rnd.nextInt(99)+1; 159 private int ran2 = rnd.nextInt(99)+1; 160 161 private int result = ran1 + ran2; 162 163 private int sum = 0; 164 165 public String getUserName() { 166 return userName; 167 } 168 169 public void setUserName(String userName) { 170 this.userName = userName; 171 } 172 173 public String getUserPassword() { 174 return userPassword; 175 } 176 177 public void setUserPassword(String userPassword) { 178 this.userPassword = userPassword; 179 } 180 181 public int getTimes() { 182 return times; 183 } 184 185 public void setTimes(int times) { 186 this.times = times; 187 } 188 189 public int getRan1() { 190 return ran1; 191 } 192 193 public void setRan1(int ran1) { 194 this.ran1 = ran1; 195 } 196 197 public int getRan2() { 198 return ran2; 199 } 200 201 public void setRan2(int ran2) { 202 this.ran2 = ran2; 203 } 204 205 public int getResult() { 206 return result; 207 } 208 209 public int getSum() { 210 return sum; 211 } 212 213 public void setSum(int sum) { 214 this.sum = sum; 215 } 216 217 218} 219 220 221###試したこと 222ネットで調べてscopeを変えてみたりしたのですが、うまくいきませんでした。 223 224###補足情報(言語/FW/ツール等のバージョンなど) 225Java 226Tomcat 8.0 227eclipse Version: Mars.2 Release (4.5.2)

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

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

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

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

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

guest

回答1

0

ベストアンサー

JSPにあるransuuが不要なのではないかと思います。
その理由は、AddBeanのインスタンスを2つ取得していますが、

JSP

1<jsp:useBean id="addbean" class="addBean.AddBean" scope="session" /> 2<jsp:useBean id="ransuu" class="addBean.AddBean" scope="page"/>

セッション属性へ AddBeanインスタンスをaddBeanの名前で、
ページ属性へ ransuuの名前で、別々に保存していますね。
計算問題を表示するところで、

JSP

1<%=ransuu.getRan1()%>

と、セッションに保存したのとは別のインスタンスである ransuu から出力しています。
addbeanから取得すればよいかと思います。

問題に正解した場合は、再度セッションに新しいAddBeanを格納すればよいかと思います。

投稿2016/05/05 08:47

A-pZ

総合スコア12011

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

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

退会済みユーザー

退会済みユーザー

2016/05/06 07:55

ありがとうございます!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問