弊社の新人エンジニア研修向けの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>");
  }
}

 

JavaWebアプリケーションの問題集に戻る