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.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class Quiz extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 最初の問は GET doPost(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html; charset=Windows-31J"); PrintWriter out = response.getWriter(); out.println(""); int i, number=0, score=0; ArrayList questions; HttpSession session = request.getSession(true) ; if (session.isNew()) { // 最初の問 questions = new ArrayList(); File f = new File(getServletContext().getRealPath("/WEB-INF/quiz.txt")); BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "Windows-31J")); String line=""; while((line=in.readLine())!=null) { line = line.trim(); if(line.trim().equals("")) continue; questions.add(line.split("\\s+")); } in.close(); session.setAttribute("questions", questions); out.println("

ようこそ QUIZへ!
では最初の問題です。

"); } else { // 最初の問ではない try { number = (Integer)session.getAttribute("number"); score = (Integer)session.getAttribute("score"); questions = (ArrayList)session.getAttribute("questions"); String[] tokens = questions.get(number-1); int a = Integer.parseInt(tokens[tokens.length-1]); int num = Integer.parseInt(request.getParameter("number")); if (num!=number) { throw new Exception("問題番号が合いません。"); } int answer = Integer.parseInt(request.getParameter("answer")); if (a==answer) { // aは最後の文字 out.println("正解です。
"); score++; } else { out.println("残念でした。
"); } } catch (Exception e) { session.invalidate(); out.println("エラーまたは許されない遷移が起こりました。リロードしてください。
");
				e.printStackTrace(out); // デバッグ用
				out.println("
"); out.close(); return; } } if (number >= questions.size()) { // 終 out.println("
これで QUIZは終わりです。
"); out.printf("正解数は、%d問でした。%n", score); session.invalidate(); } else { // 次の問を表示 String[] tokens = questions.get(number); out.printf("第%d問: %s
%n", ++number, tokens[0]); out.println("
"); out.printf("", number); for (i=1; i %s", i, tokens[i]); } out.println("
"); out.println(""); out.println(""); out.println(""); session.setAttribute("number", number); session.setAttribute("score", score); } out.println(""); out.close(); } }