IDE:Eclipse
サーブレットでCookieの取得を行っています。
アクセス時にクッキーを利用して現在時刻を記録したいです。
また、2回目以降のアクセス時はクッキーの値を取り出し、前回アクセスした時刻の情報を画面に表示したいです。
内容はこちらのコードで間違いないでしょうか?
servlet
1package api; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5import java.net.URLDecoder; 6import java.net.URLEncoder; 7import java.text.SimpleDateFormat; 8import java.util.Date; 9 10import javax.servlet.ServletException; 11import javax.servlet.annotation.WebServlet; 12import javax.servlet.http.Cookie; 13import javax.servlet.http.HttpServlet; 14import javax.servlet.http.HttpServletRequest; 15import javax.servlet.http.HttpServletResponse; 16 17/** 18 * Servlet implementation class GetCookie 19 */ 20@WebServlet(name = "GetCookie.java", urlPatterns = { "/GetCookie.java" }) 21public class GetCookie extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 24 /** 25 * @see HttpServlet#HttpServlet() 26 */ 27 public GetCookie() { 28 super(); 29 // TODO Auto-generated constructor stub 30 } 31 32 /** 33 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 34 */ 35 protected void doGet(HttpServletRequest request, HttpServletResponse response) 36 throws ServletException, IOException { 37 response.setContentType("text/html;charset=UTF-8"); 38 try (PrintWriter out = response.getWriter()) { 39 String encodedData = URLEncoder.encode("yyyy/MM/dd HH:mm:ss", "UTF-8"); 40 Date d = new Date(); 41 SimpleDateFormat sdf = new SimpleDateFormat(encodedData); 42 String time = sdf.format(d); 43 Cookie C = new Cookie("Data",time); 44 response.addCookie(C); 45 Cookie[] cs = request.getCookies(); 46 if (cs != null) { 47 for (int i = 0; i < cs.length; i++) { 48 String cookieName = cs[i].getName(); 49 if (cookieName.equals("Data")) { 50 String cookieValue= cs[i].getValue(); 51 String decodedData = URLDecoder.decode(cookieValue,"UTF-8"); 52 out.print(decodedData); 53 break; 54 } 55 } 56 } 57 } 58 } 59 /** 60 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 61 */ 62 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 63 // TODO Auto-generated method stub 64 doGet(request, response); 65 } 66 67} 68
更新を押したところサーバーのエラーログに重大と出ました。
こちらの解決方法も教えていただければ幸いです。
情報: プロトコルハンドラ ["http-nio-8080"] を初期化します。 [水 3 10 18:36:14 JST 2021] 情報: Using a shared selector for servlet write/read [水 3 10 18:36:14 JST 2021] 情報: Initialization processed in 735 ms [水 3 10 18:36:14 JST 2021] 情報: サービス [Catalina] を起動します [水 3 10 18:36:14 JST 2021] 情報: Starting Servlet Engine: Apache Tomcat/8.5.61 [水 3 10 18:36:14 JST 2021] 情報: プロトコルハンドラー ["http-nio-8080"] を開始しました。 [水 3 10 18:36:15 JST 2021] 情報: Server startup in 399 ms [水 3 10 18:36:15 JST 2021] 重大: サーブレット [GetCookie.java] のServlet.service()が例外を投げました [水 3 10 18:36:36 JST 2021]
試したこと
Servlet.service()が例外を投げましたを検索して対処方法を調べたところ別のところにエラーログが出てるはずというコメントが多く、これ以上表示されていないので手詰まりの状態です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー