Java の Servlet
, Service
を使った Web App 開発のはなし
Servlet
と Service
の関係をざっくりまとめる
細かいことは気にしない!!いったんは流れが分かればOK!!!!
説明で使ってるサンプルプロジェクトは GitHub java-webapp-clump にあります
Servlet
が呼ばれるまでの流れは JSP と Servlet ざっくりまとめ を見てください
Servlet, Service の役割
- Servlet
画面(ブラウザ)から呼ばれて処理を呼ぶやつ
表示する画面決める・入力を受け取る・処理を呼び出す・処理結果を設定する - Service
処理をおこなうやつ
入力(引数)もらって処理して結果(戻り値)かえす
Servlet と Service のつながり
ざっくりした流れ
-
Servlet
がService
をクラスのインスタンス変数として持ってる -
Servlet
が ブラウザから実行される -
Servlet
が 入力を受け取ってService
の処理(メソッド)を実行して結果を受け取る -
Servlet
が 結果を設定してJSPを返してブラウザに表示
あとは 2~4 を繰り返す。
Servlet の Service の持ち方
Servlet
が Service
をクラスのインスタンス変数として持ってる
サンプルプロジェクトでは簡易な方法にしてるが興味ある方は DI(Dependency Injection)コンテナ を FW だったりで使った方が楽かも
public class RetroMethodServlet extends HttpServlet {
private RetroMethodService service = new RetroMethodService();
// ・・・
}
Servlet から Service を実行
入力を受け取ってそれを引数に処理することが多いので Servlet
の doPost
メソッドで Service
を実行している
ただ入力が必要ない時とかは doGet
メソッドだったりどこから実行してもOK
Servlet
から Service
を呼び出すときに気にするところは...メソッドの使い方くらい!!!
- メソッド宣言の見方
-
修飾子
戻り値型
メソッド名
(引数型
引数の変数名
, ...) - 例:
public
String
work1
(int
input1
,int
input2
,int
input3
)
-
- メソッドの気にするところ
- 呼び出しと宣言のメソッド名あわせる
- メソッドの引数の型と個数を合わせる
- メソッドの戻り値の型を合わせる
- 戻り値あるとき(void以外)は
return
が必ず必要になる
Servlet の入力値の取得
入力を取得してるところ
request.getParameter( キー名 )
を使って取得
// 次の3行が 入力値を取得してる箇所
int input1 = Integer.parseInt(request.getParameter("input11"));
int input2 = Integer.parseInt(request.getParameter("input12"));
int input3 = Integer.parseInt(request.getParameter("input13"));
// 次の行が service のメソッド呼び出し
int result = service.work1(input1, input2, input3);
Servlet の結果の設定
結果を設定してるところ
request.setAttribute( キー名 , 結果の値 )
を使って設定
// 次の行が service のメソッド呼び出し
int result = service.work1(input1, input2, input3);
// 次の行が 結果を設定してる箇所
request.setAttribute("result1", result);