回答編集履歴
5
コード修正
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
}
|
81
81
|
}
|
82
82
|
```
|
83
|
-
abc
|
83
|
+
abc/Counter.java
|
84
84
|
```java
|
85
85
|
package abc;
|
86
86
|
|
4
コード追加
test
CHANGED
@@ -24,3 +24,123 @@
|
|
24
24
|
getCount → incrementCount
|
25
25
|
ResultCount → getCount
|
26
26
|
が適切ではないでしょうか。
|
27
|
+
|
28
|
+
---
|
29
|
+
いつものことですがテキトウにやってみました。
|
30
|
+
|
31
|
+
doGet でまずセッションからカウンタを取り出しています。カウンタがまだ無いなら作ってセッションに入れます。
|
32
|
+
後は乱数に応じてカウンタを増やしたりフォワード先を決めたりセッションを破棄したり…。
|
33
|
+
フォワード先で参照できるようにリクエストにカウンタを入れてフォワード、で完。
|
34
|
+
next.jsp/end.jsp の useBean ではカウンタの生成は必要無いので class 属性で無く type 属性を使っています(余り意味は無い)。
|
35
|
+
(RandomNum は Random のラッパーでしか無いので直で Random を使っています。)
|
36
|
+
|
37
|
+
abc/Servlet.java
|
38
|
+
```java
|
39
|
+
package abc;
|
40
|
+
|
41
|
+
import java.io.IOException;
|
42
|
+
import java.util.Random;
|
43
|
+
|
44
|
+
import javax.servlet.ServletException;
|
45
|
+
import javax.servlet.annotation.WebServlet;
|
46
|
+
import javax.servlet.http.*;
|
47
|
+
|
48
|
+
@WebServlet("/Servlet")
|
49
|
+
public class Servlet extends HttpServlet {
|
50
|
+
private static final String COUNTER = "counter";
|
51
|
+
|
52
|
+
private Random random = new Random();
|
53
|
+
|
54
|
+
@Override
|
55
|
+
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
56
|
+
HttpSession session = request.getSession(true);
|
57
|
+
|
58
|
+
Counter counter = (Counter)session.getAttribute(COUNTER);
|
59
|
+
if(counter == null) {
|
60
|
+
counter = new Counter();
|
61
|
+
session.setAttribute(COUNTER, counter);
|
62
|
+
}
|
63
|
+
|
64
|
+
String next;
|
65
|
+
if(random.nextInt(10) < 7) {
|
66
|
+
counter.increment();
|
67
|
+
next = "next.jsp";
|
68
|
+
} else {
|
69
|
+
session.invalidate();
|
70
|
+
next = "end.jsp";
|
71
|
+
}
|
72
|
+
|
73
|
+
request.setAttribute(COUNTER, counter);
|
74
|
+
request.getRequestDispatcher(next).forward(request, response);
|
75
|
+
}
|
76
|
+
|
77
|
+
@Override
|
78
|
+
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
79
|
+
doGet(request, response);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
```
|
83
|
+
abc.Counter.java
|
84
|
+
```java
|
85
|
+
package abc;
|
86
|
+
|
87
|
+
public class Counter {
|
88
|
+
private int value = 0;
|
89
|
+
void increment() { value ++; }
|
90
|
+
public int getValue() { return value; }
|
91
|
+
}
|
92
|
+
```
|
93
|
+
index.jsp
|
94
|
+
```html
|
95
|
+
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
96
|
+
pageEncoding="UTF-8"%>
|
97
|
+
<!DOCTYPE html>
|
98
|
+
<html>
|
99
|
+
<head>
|
100
|
+
<meta charset="UTF-8">
|
101
|
+
<title>Insert title here</title>
|
102
|
+
</head>
|
103
|
+
<body>
|
104
|
+
<form action="Servlet" method="get">
|
105
|
+
<input type="submit" value="開始!">
|
106
|
+
</form>
|
107
|
+
</body>
|
108
|
+
</html>
|
109
|
+
```
|
110
|
+
next.jsp
|
111
|
+
```html
|
112
|
+
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
113
|
+
pageEncoding="UTF-8"%>
|
114
|
+
<jsp:useBean scope="request" id="counter" type="abc.Counter"/>
|
115
|
+
<!DOCTYPE html>
|
116
|
+
<html>
|
117
|
+
<head>
|
118
|
+
<meta charset="UTF-8">
|
119
|
+
<title>Insert title here</title>
|
120
|
+
</head>
|
121
|
+
<body>
|
122
|
+
<jsp:getProperty name="counter" property="value" />回目!
|
123
|
+
続くよ!!
|
124
|
+
<form action="Servlet" method="post">
|
125
|
+
<input type="submit" value="もう一発?">
|
126
|
+
</form>
|
127
|
+
</body>
|
128
|
+
</html>
|
129
|
+
```
|
130
|
+
end.jsp
|
131
|
+
```html
|
132
|
+
<%@ page language="java" contentType="text/html; charset=UTF-8"
|
133
|
+
pageEncoding="UTF-8"%>
|
134
|
+
<jsp:useBean scope="request" id="counter" type="abc.Counter"/>
|
135
|
+
<!DOCTYPE html>
|
136
|
+
<html>
|
137
|
+
<head>
|
138
|
+
<meta charset="UTF-8">
|
139
|
+
<title>Insert title here</title>
|
140
|
+
</head>
|
141
|
+
<body>
|
142
|
+
終わり!
|
143
|
+
<jsp:getProperty name="counter" property="value" />回成功した
|
144
|
+
</body>
|
145
|
+
</html>
|
146
|
+
```
|
3
Random については間違っていたので削除
test
CHANGED
@@ -5,7 +5,9 @@
|
|
5
5
|
セッションを利用してみよう
|
6
6
|
https://kanda-it-school-kensyu.com/java-jsp-servlet-contents/jjs_ch12/jjs_1202/
|
7
7
|
|
8
|
-
random の方は、内部で使っている Random クラスは疑似乱数で、適切なシードで初期化しないと毎回同じ値が出るかもしれません。(確認していません。)
|
8
|
+
~~random の方は、内部で使っている Random クラスは疑似乱数で、適切なシードで初期化しないと毎回同じ値が出るかもしれません。(確認していません。)~~
|
9
|
+
間違ってました。デフォルトコンストラクタで Random インスタンスを生成するのが一番らしぃです。
|
10
|
+
http://javasampleokiba.blog.fc2.com/blog-entry-44.html
|
9
11
|
|
10
12
|
蛇足ながら…
|
11
13
|
CountBean の
|
2
リンク追加
test
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
doGet を実行する度に、 count も result も、ついでに random も作り直しているように見えますけども。
|
2
2
|
CountBean の初期値は 0 ですから、いくらやっても 2 以上にはならないのではないでしょうか。
|
3
3
|
セッションに該当オブジェクトがあったらそれを取り出して使うようにする必要があるでしょう。
|
4
|
+
|
5
|
+
セッションを利用してみよう
|
6
|
+
https://kanda-it-school-kensyu.com/java-jsp-servlet-contents/jjs_ch12/jjs_1202/
|
4
7
|
|
5
8
|
random の方は、内部で使っている Random クラスは疑似乱数で、適切なシードで初期化しないと毎回同じ値が出るかもしれません。(確認していません。)
|
6
9
|
|
1
追加
test
CHANGED
@@ -1,4 +1,21 @@
|
|
1
1
|
doGet を実行する度に、 count も result も、ついでに random も作り直しているように見えますけども。
|
2
2
|
CountBean の初期値は 0 ですから、いくらやっても 2 以上にはならないのではないでしょうか。
|
3
|
+
セッションに該当オブジェクトがあったらそれを取り出して使うようにする必要があるでしょう。
|
3
4
|
|
4
5
|
random の方は、内部で使っている Random クラスは疑似乱数で、適切なシードで初期化しないと毎回同じ値が出るかもしれません。(確認していません。)
|
6
|
+
|
7
|
+
蛇足ながら…
|
8
|
+
CountBean の
|
9
|
+
```java
|
10
|
+
public int getCount() {
|
11
|
+
count++;
|
12
|
+
return count;
|
13
|
+
}
|
14
|
+
public int ResultCount() {
|
15
|
+
return count;
|
16
|
+
}
|
17
|
+
```
|
18
|
+
の各々のメソッド名は、
|
19
|
+
getCount → incrementCount
|
20
|
+
ResultCount → getCount
|
21
|
+
が適切ではないでしょうか。
|