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, answer=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 { answer = Integer.parseInt(request.getParameter("answer")); 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]); 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.println("正解数は、"+score+"問でした。"); session.invalidate(); } else { // 次の問を表示 String[] tokens = questions.get(number); out.println("次の問: "+tokens[0]+"
"); out.println("
"); for (i=0; i %s", i+1, tokens[i+1]); } out.println("
"); out.println(""); out.println(""); out.println(""); number++; session.setAttribute("number", number); session.setAttribute("score", score); } out.println(""); out.close(); } }