IT-LIFEブログ

主にIT系のことや時事ネタや、たまに雑記

【Java】サーブレットで訪問回数カウントプログラムを作ってみた!

https://c.s-microsoft.com/en-ie/CMSImages/tools-for-java-1.png?version=4bd8ce88-1f2d-4890-c7b3-b1218e0fde2e


こんにちは、あつかんです。
最近、javaを猛烈に勉強していたので習った知識をブログで共有しておこうと思います。
今回は、Webページを訪問した時によく目にする訪問回数をカウントするプログラムを作成してみました!

package servlet;

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

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

@WebServlet("/CounterServlet")
public class CounterServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	public void init(ServletConfig config) throws ServletException{
		super.init(config);
		Integer count = 0;
		ServletContext application = config.getServletContext();
		application.setAttribute("count", count);
		System.out.println("ini()が実行されました");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		ServletContext application = this.getServletContext();
		Integer count = (Integer)application.getAttribute("count");
		count++;
		application.setAttribute("count", count);

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>訪問回数を表示</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<p>訪問回数:" + count + "</p>");
		out.println("<a href=\"/example/CounterServlet\">更新</a>");
		out.println("</body>");
		out.println("</html>");

	}

	public void destroy() {
		System.out.println("destroy()が実行されました");
	}

}


まずinitメソッドから始まり、ここではcount=0の値を
application.setAttribute("count", count);
を使用してcount変数に入っている値0を"count"にアプリケーションスコープとして保存しています。
次にdoGetメソッドが実行されます。
application.getAttribute("count");
で"count"に入っている値を取り出して、その値に+1をしています。
そのあとに
application.setAttribute("count", count);
でcount変数に入っている値を"count"にアプリケーションスコープとして保存しています。
そして、ページが更新されるとアプリケーションスコープに入っている"count"の中身を
application.getAttribute("count");
で取り出します。
更新されるとinitメソッドの特性(1回目しか実行されない特性)により、initメソッドは処理されずにdoGetメソッドからプログラムが始まります。
つまり更新されるたびに1が足されていくため、訪問回数がカウントできるわけですね!


プログラムをコピペして、Tomcatサーバーで実行してみると動くと思います!
わからないことがありましたら質問受付ます!
ではでは〜