弊社の新人エンジニア研修向けのJSP Servletの問題集です。
1.会員登録と訪問回数を表示するプログラムを作成しなさい。
以下の表示になるようにソースコードのコメント欄①②を埋めなさい。
なお、クッキーの保存期間は30秒間とする。
ヒント:クッキーに日本語を読み書きするためには、URLEncoder.encode()とURLDecoder.decode() を調べてください。
<アウトプット例>
①最初の画面(HTML)ではIDと名前の入力を求める。
②2番目の画面ではIDと名前を画面表示する。「再度訪問してみる」のリンクをたどると画面遷移する。 ③訪問回数を表示する。
④クッキーがない状態(初めての訪問)でソースコード3に直接アクセスすると以下の画面が表示され登録を促す。
⑤上記で記述した以外のことは各自で決めて構わない。
<ソースコード① cookiesample.html>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>クッキーの問題</title> </head> <body> <h1>会員登録</h1> <form action="WriteCookieSampleServlet" method="post"> <p>ID (半角英数):<input type="text" name="id"></p> <p>名前(日本語可): <input type="text" name="name"></p> <p><input type="submit" value="登録"></p> </form> </body> </html>
<ソースコード②>
package pac1; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/WriteCookieSampleServlet") public class WriteCookieSampleServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); String name = request.getParameter("name"); Cookie cookMyNo = new Cookie("Id", id); cookMyNo.setMaxAge(30); response.addCookie(cookMyNo); //①ここでクッキーに名前を書き込む //②ここでクッキーにアクセス回数を書き込む PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset=\"UTF-8\">"); out.println("<title>クッキーの問題</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>クッキー情報の表示</h1>"); out.println("<p>"); out.println("ID: " + id); out.println("<p>"); out.println("お名前: " + name); out.println("<p>"); out.println("<a href=\"ReadCookieSampleServlet\">再度訪問してみる</a>"); out.println("</body>"); out.println("</html>"); } }
<ソースコード③>
package pac1; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/ReadCookieSampleServlet") public class ReadCookieSampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset=\"UTF-8\">"); out.println("<title>クッキーの問題</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>クッキー情報</h1>"); Cookie[] cookies = request.getCookies(); if (cookies != null) { String name = ""; int count = 0; for (Cookie cookie : cookies) { if (/*③クッキーにNameがあれば*/) { name = URLDecoder.decode(cookie.getValue(),"UTF-8") ; } if (/*③クッキーにCountがあれば*/) { count = Integer.parseInt(cookie.getValue()); count++; String strCount = count + ""; Cookie cookCount = new Cookie("Count", strCount); cookCount.setMaxAge(30); response.addCookie(cookCount); } } out.println("<p>"); out.println(name + "さん"); out.println("<p>"); out.println("こんにちは" + count + "回目の訪問ありがとうございます。<br><br>"); out.println("F5キーを連打して、ブラウザの再読み込みをしてみてください。"); } else { out.println("<p>"); out.println("クッキーがありません。"); out.println("<p>"); out.println("情報を登録してから来てください"); out.println("<p>"); out.println("<a href=\"cookieinfo.html\">登録</a>"); } out.println("</body>"); out.println("</html>"); } }