前提・実現したいこと
実現したいことは表題の通りです。
現在時刻をクッキーに記録し、2回目以降のアクセス時にクッキー値を取り出し前回のアクセス時刻を表示する処理を実装したいです。
発生している問題・エラーメッセージ
以下のコードを実行しても何も表示されません。
試行錯誤した結果、現在時刻をクッキーに記録するつもりで書いた
「response.addCookie(c);」
の所で処理が止まっていることがわかりました。
「response.addCookie(c);」を消すと最後まで処理が実行され、画面に「RELOAD」が表示されます。
なぜ上記コードの所で処理が止まってしまうのか、クッキーに時刻を記録するにはどのような処理が適切なのか、ご教示いただければ幸いです。
該当のソースコード
Java
1package a; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5import java.text.SimpleDateFormat; 6import java.util.Date; 7 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.Cookie; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14 15/** 16 * Servlet implementation class GetCookie 17 */ 18@WebServlet("/GetCookie") 19public class GetCookie extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 /** 23 * @see HttpServlet#HttpServlet() 24 */ 25 public GetCookie() { 26 super(); 27 // TODO Auto-generated constructor stub 28 } 29 30 /** 31 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 32 */ 33 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 34 // TODO Auto-generated method stub 35 36 try(PrintWriter out = response.getWriter()){ 37 38 response.setContentType("text/html;charset=UTF-8"); 39 40 41 42 43 Date d = new Date(); 44 String time = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(d); 45 46 47 Cookie[] cs = request.getCookies(); 48 Cookie c = new Cookie("Data",time); 49 50 out.println("<html>"); 51 out.println("<head>"); 52 out.println("<title>title</title>"); 53 out.println("</head>"); 54 out.println("<body>"); 55 if (cs != null) { 56 for (int i = 0; i < cs.length; i++){ 57 String cookieName = cs[i].getName(); 58 if (cookieName.equals("Data")){ 59 String cookieValue= cs[i].getValue(); 60 out.print(cookieValue); 61 break; 62 } 63 } 64 } 65 66 response.addCookie(c); 67 68 c.setMaxAge(60 * 60 * 2); 69 String linkUrl = request.getRequestURI(); 70 out.println("<p><a href=\"" + linkUrl + "\">RELOAD</a>"); 71 72 out.println("</body>"); 73 out.println("</html>"); 74 75 } 76 }
回答1件
あなたの回答
tips
プレビュー