🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

1089閲覧

サーブレットでCookieの取得について

koizumi.

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2021/03/10 09:56

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()が例外を投げましたを検索して対処方法を調べたところ別のところにエラーログが出てるはずというコメントが多く、これ以上表示されていないので手詰まりの状態です。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/10 09:58

URLに.javaまで入る実装は何を参考にしましたか?
koizumi.

2021/03/10 10:03

webで見つけたスクールの教材の課題でその例文を引用しました。
m.ts10806

2021/03/10 10:16

なるほど。あまりベターではないと思います。 あと、tryだけじゃなくcatchしてスタックトレース出力してスローされた例外確認してください。
koizumi.

2021/03/11 01:31

catchに関して調べてみようと思います。 ありがとうございます。
guest

回答1

0

自己解決

エンコードするタイミングが間違っていたようです。
String encodedData = URLEncoder.encode("yyyy/MM/dd HH:mm:ss", "UTF-8");
を型変換した値の後に実施し、Cookieに入れたところ正常に稼働いたしました。

投稿2021/03/11 03:17

koizumi.

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問