概要
API3ではシンプルなカウンターを作成する。
動作確認
# ソースコードプログラムによる制御 pic.twitter.com/STyOpOApB1
— いまむら たくま (@Imamuuu5) May 15, 2023
java
API3.java
package app28;
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;
@WebServlet("/api3")
public class API3 extends HttpServlet {
private int count; // カウンター
// GET 処理(GET メソッドで HTTP リクエストが送られてくるたびに実行される)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// レスポンスの設定(毎回この設定)
response.setHeader("Cache-Control", "no-cache"); // キャッシュを利用しない
response.setHeader("Pragma", "no-cache"); // キャッシュを利用しない(下位互換性用)
response.setDateHeader("Expires", 0); // キャッシュ有効期限0
response.setCharacterEncoding("UTF-8"); // レスポンス文字コード UTF-8 設定
response.setContentType("application/json"); // レスポンスタイプ application/json 設定
count++; // カウントを1増やす
// レスポンスを {"count": <count>} で返却 <count> はカウント変数の中身を表す
// レスポンスボディ作成処理
PrintWriter out = response.getWriter(); // レスポンス書き込み用 PrintWriter 取得
out.println("{\"count\": " + count + "}"); // レスポンス書き込み {"count": <count>}
out.flush(); // フラッシュ処理(強制送信のようなもの)
out.close(); // PrintWriterのクローズ(これ以降書き込めない)
}
}
説明
実行アドレスのパスの設定
@WebServlet("/api3")
実行アドレス
http://localhost:8080/App28/api3
int 変数 counter を用意し、API3が呼ばれる度にカウンターを1増やし、データを送信するという処理になっている。
Servletのポイントとして、 インスタンス変数(クラス直下の変数) はアクセスの度に 初期化されない という特性がある。
1人目がアクセスした場合結果は 1 が返却され、次に別の人間がアクセスした場合結果は 2 が返却される。
サーバが止まるまで、最後のデータが保存されるため、何度も使いまわしたいデータなどはインスタンス変数としてクラス直下に作るようにする。
インスタンス変数とは、オブジェクト指向プログラミング言語で、個々のインスタンスごとに固有の変数。クラス定義で単にメンバ変数、フィールド、データメンバなどという場合はこれを指す。