K's Atelier

個人的な学習記録

Understand the difference between a request and a session.

Servletの研修にて。HttpServletRequestとHttpSessionの違いをお手軽に試すサンプル。
複数ブラウザを使用してリロードすることで,Sessionが維持される様子が分かる。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/*
 * 以下のサーブレットを複数のブラウザの複数のタブで開き、動作を確認する。
 * 結果の考察(どうなったか、なぜそうなるのか)をノートにまとめる。
 */

@WebServlet("/counter")
public class CounterServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();

        Integer reqCounter = (Integer) request.getAttribute("counter");
        if (reqCounter == null) {
            request.setAttribute("counter", 0);
        } else {
            request.setAttribute("counter", reqCounter + 1);
        }

        Integer sesCounter = (Integer) session.getAttribute("counter");
        if (sesCounter == null) {
            session.setAttribute("counter", 0);
        } else {
            session.setAttribute("counter", sesCounter + 1);
        }

        PrintWriter out = response.getWriter();
        out.println("request counter: " + (Integer) request.getAttribute("counter"));
        out.println("session counter: " + (Integer) session.getAttribute("counter"));
    }

}