サーブレットのセッションオブジェクトを利用する - Java

Java サーブレットのセッションオブジェクトを利用します。

コード (サーブレット:GetSessionCounter.java)

package webApplication9;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GetSessionCounter extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res)
          throws ServletException, IOException {

    String message = null;
    Integer counter = null;
    HttpSession session = req.getSession(false);

    //セッションオブジェクトの獲得確認
    if (session == null || session.getAttribute("counter") == null) {
      //セッションが取得できなければ新規作成
      session = req.getSession(true);
      message = "You are first Access";
      counter = new Integer(0);
    } else {
      //セッションが取得できた場合はカウンタを取り出す
      message = "Welcome again";
      counter = (Integer) session.getAttribute("counter");
    }
    //カウンタをインクリメントしセッションオブジェクトに保存する
    counter = new Integer(counter.intValue() + 1);
    session.setAttribute("counter", counter);
    res.setContentType("text/html; charset=ISO-2022-JP");

    PrintWriter out = res.getWriter();
    out.println("<HTML>");
    out.println("<HEAD>");
    out.println("<TITLE>Get Session Counter</TITLE>");
    out.println("</HEAD>");
    out.println("<BODY>");
    out.println("<H1>Get Session Counter</H1>");
    out.println("<BR><HR><BR>");
    out.println("<H2><FONT size=\"20\">" + message + "</FONT></H2>");
    out.println("<P>You have hit this page " + counter + " times</P>");
    out.println("<A href=\"./GetSessionCounter\">click</A>");
    out.println("</BODY>");
    out.println("</HTML>");

    out.close();
  }

  /** Returns a short description of the servlet. */
  public String getServletInfo() {
    return "Short description";
  }
}

解説

doGet()メソッドを実装します。
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

HttpServletRequest.getSession()メソッドを呼び出しHttpSessionを取得します。
  HttpSession session = req.getSession(false);

セッションオブジェクトが取得でき、セッションオブジェクトのcounterオブジェクトに値があるか判定します。
  if (session == null || session.getAttribute("counter") == null) {

セッションオブジェクトが取得できない(ない)場合はHttpServletRequest.getSession()の引数にTrueをつけて呼び出し新規セッションオブジェクトを作成します。counter変数を0で初期化します。
  session = req.getSession(true);
  message = "You are first Access";
  counter = new Integer(0);

セッションオブジェクトが取得できた場合はセッションオブジェクトのcounterオブジェクトの値をcounter変数に代入します。
 message = "Welcome again";
 counter = (Integer) session.getAttribute("counter");

counter変数をインクリメントします。HttpSession.setAttributes()メソッドを呼び出しcounterオブジェクトにインクリメントした値を設定します。
 counter = new Integer(counter.intValue() + 1);
 session.setAttribute("counter", counter);

HttpResponse.setContentType()メソッドを呼び出しContentTypeを設定します。
 res.setContentType("text/html; charset=ISO-2022-JP");

PrintWriterを取得しサーブレットが返すHTMLを出力します。
  PrintWriter out = res.getWriter();
  out.println("<HTML>");
  ...(中略)
  out.println("<P>You have hit this page " + counter + " times</P>");
  out.println("<A href=\"./GetSessionCounter\">click</A>");
  out.println("</BODY>");
  out.println("</HTML>");
  out.close();

コード

htmlファイル
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>

    <h1>JSP Page</h1>
    <a href="GetSessionCounter">Click!!</a>
  </body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
    "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>GetSessionCounter</servlet-name>
    <servlet-class>webApplication9.GetSessionCounter</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GetSessionCounter</servlet-name>
    <url-pattern>/GetSessionCounter</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

実行結果

HTMLページ


サーブレット

アクセスするごとにカウントアップされます。

著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2023-12-11
作成日: 2011-02-11
iPentec all rights reserverd.