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