実現したいこと
ボタンをクリックするたびに一定の確率で成功と失敗を判定し、成功した連続回数を画面に表示したい。
前提
javaを独学で学んでおり、「Servlet」「jsp」「bean」について学習したため上記のようなものを試しに作ってみようと思ったのですがうまくいきません。
具体的にはエラーなどは起きないのですが、何度ボタンを押しても「2」とカウントされ、結果の数値も「1」になってしまいます。
該当のソースコード
index.html
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>連続チャレンジ</title> 6</head> 7<body> 8 9<h1>連続チャレンジ!</h1> 10<p>何回できるかな?</p> 11 12<form action="/javaweb/Servlet" method="get"> 13 <input type="submit" value="開始!"> 14</form> 15 16 17 18</body> 19</html>
Servlet.java
1package controller; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.HttpSession; 12import bean.CountBean; 13 14 15@WebServlet("/Servlet") 16public class Servlet extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 20 21 public Servlet() { 22 super(); 23 24 } 25 26 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 request.setCharacterEncoding("utf-8"); 28 response.setContentType("text/html;charset=utf-8"); 29 30 RandomNum random = new RandomNum();//ランダムな数を取得するためのインスタンス 31 CountBean count = new CountBean();//カウント数を格納するためのインスタンス 32 CountBean result = new CountBean();//最終的な結果を格納する為のインスタンス 33 34 HttpSession session = request.getSession(true);//セッションの取得 35 36 37 38 39 if(random.random() <7) { //乱数で7未満が出た場合 40 41 count.setCount(count.getCount());//countに格納された数+1をcountに格納 42 session.setAttribute("count", count);//sessionスコープに格納 43 44 RequestDispatcher rd = request.getRequestDispatcher("view/next.jsp"); 45 rd.forward(request, response); 46 47 }else{ //乱数で7より上の数が出た場合 48 49 result.setCount(count.ResultCount()); //最終的な成功回数をresultインスタンスへ格納 50 51 request.setAttribute("result", result);//リクエストスコープに格納 52 53 session.invalidate();//セッションの破棄 54 55 RequestDispatcher rd = request.getRequestDispatcher("view/end.jsp"); 56 rd.forward(request, response); 57 } 58 59 } 60 61 62 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 63 64 doGet(request, response); 65 } 66 67}
next.jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 4<jsp:useBean id = "count" scope = "session" class = "bean.CountBean"/> 5 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>連続チャレンジ</title> 11</head> 12 13<body> 14 15<jsp:getProperty name="count" property="count" />回目! 16続くよ!! 17 18<form action="/javaweb/Servlet" method="post"> 19 <input type="submit" value="もう一発?"> 20</form> 21 22</body> 23</html> 24
end.jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 4<jsp:useBean id="result" scope="request" class="bean.CountBean"/> 5 6<!DOCTYPE html> 7<html> 8<head> 9<meta charset="UTF-8"> 10<title>連続チャレンジ</title> 11</head> 12<body> 13終わり! 14 15<jsp:getProperty name="result" property="count" />回成功した 16 17</body> 18</html>
Random.java
1package controller; 2 3import java.util.Random; 4 5public class RandomNum { 6 7 public int random() { 8 Random rand = new Random(); 9 int num = rand.nextInt(10); 10 return num; 11} 12}
試したこと
色々いじってみると多少数値や挙動が変わりましたが上手くいかなかった為質問させて頂きました。
独学という事もあり見にくい部分などあるかもしれませんがご教授いただけるとありがたいです。
よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
eclipseを使いTomcatを起動して動作は確認しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/11/15 13:08
2024/11/15 13:45
2024/11/16 01:51 編集
2024/11/17 02:51 編集
2024/11/17 05:02