import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/Quiz")
public class Quiz extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 最初の問は GET
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("
");
int i, number=0, score=0;
ArrayList questions;
HttpSession session = request.getSession(true);
if (session.isNew() || session.getAttribute("questions") == null) {
// 最初の問
questions = new ArrayList();
File f = new File(getServletContext().getRealPath("/WEB-INF/quiz.txt"));
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));
String line="";
while((line=in.readLine())!=null) {
line = line.trim();
if(line.trim().equals(""))
continue;
questions.add(line.split("\\s+")); // 空白の1つ以上の繰返し
}
in.close();
session.setAttribute("questions", questions);
out.println("ようこそ QUIZへ!
では最初の問題です。
");
} else {
// 最初の問ではない
try {
number = (int)session.getAttribute("number");
score = (int)session.getAttribute("score");
questions = (ArrayList)session.getAttribute("questions");
String[] tokens = questions.get(number-1);
int a = Integer.parseInt(tokens[tokens.length-1]);
int answer = Integer.parseInt(request.getParameter("answer"));
if (a==answer) { // aは最後の文字
out.println("正解です。
");
score++;
} else {
out.println("残念でした。
");
}
} catch (Exception e) {
// session.invalidate();
session.removeAttribute("questions);
out.println("想定外のアクセスでエラーが起こりました。タブを閉じるかリロードしてください。");
e.printStackTrace(out);
out.println("");
out.close();
return;
}
}
if (number >= questions.size()) { // 終
out.println("
これで QUIZは終わりです。
");
out.printf("正解数は、%d問でした。%n", score);
// session.invalidate();
session.removeAttribute("questions);
} else { // 次の問を表示
String[] tokens = questions.get(number);
out.println("次の問: "+tokens[0]+"
");
out.println("");
number++;
session.setAttribute("number", number);
session.setAttribute("score", score);
}
out.println("