【JavaWebアプリ入門 #07】サーブレット

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は…

JavaWebアプリ入門 #07
サーブレット

というテーマでお送りします。

彩香
キラキラした「アクセサリー」みたいな響きですね。
興味津々です。よろしくお願いします。
剛留
スピードが出る「車」みたいな響きですね。
どんな内容か、期待しています。よろしくお願いします。

【1】 サーブレットとは

サーブレットとは…

Webコンテナ上で動くJavaによるWebアプリの一部です。

そして…

リクエストに応じた処理をする Javaプログラムです。

1つずつ見ていきましょう。

① Webコンテナ上で動くJavaによるWebアプリの一部

Webブラウザは HTTP通信を行い
Webサーバにリクエストを出し、レスポンスを受け取ります。

Webサーバは、受け取ったリクエストに応じた処理を
APサーバに依頼します。

APサーバには、Webコンテナがあって…

私達が作成する Webアプリケーションは
この Webコンテナ上で動きます。

そして…

サーブレットは この Webコンテナ上で動く
Webアプリケーションの一部

という位置づけになるのです。

② リクエストに応じた処理をする Javaプログラム

また、リクエストに応じた処理をする Javaプログラム
という点についてです。

前回お話したように、URLは
以下の4つの部分に 分かれます。

✅ http というプロトコルの部分
✅ サーバ名の部分
✅ Webアプリ固有のコンテキストルートの部分
✅ Webアプリ内で定められた URLパターンの部分

そして、1つの Webアプリの中では

URLパターン

に応じて、サーブレットが動くことになります。

すなわち、サーブレットとは

URLパターンに応じて動くJavaプログラム

と言えるのです。

【2】 サーブレット定義

まず、サーブレットの位置づけを見ておきましょう。

サーブレットは、Javaのクラスとして定義します。

javax.servlet.http パッケージの HttpServlet という
抽象クラスを 継承したクラスです。

そして、doGet()メソッド・doPost()メソッドを
必要に応じて オーバーライドします。

私達 Webアプリ開発者は HttpServlet を継承した
サーブレットを URLパターン毎に作成します。

そして、その時に…

どのURLパターンに対して、どのサーブレットが
対応するか、紐づけをしておきます。

Webコンテナは、リクエストを受けると
URLパターンから 該当のサーブレットを特定します。

そして、初回のリクエスト時にインスタンス化を行い
2回目からは既存のインスタンスを使用します。

更に、Webコンテナは、リクエストを受けた時に
その種類によって サーブレット内のメソッドを 呼び出します。

リクエストの種類は2種類で…
GETリクエストと POSTリクエストです。

GETリクエストの場合には doGet()メソッドを呼び出し
POSTリクエストの場合には doPost() メソッドを呼び出します。

2つのリクエストの違いは、いくつかありますが…

URLを指定した場合(アドレスバー や リンク)の
リクエストは GETリクエストになります。

Webブラウザの画面から入力して、ボタンを押すことで
リクエストを出す場合には…

GETリクエストの場合と POSTリクエストの場合の
両方があります。

今回は…

URLを指定した場合には GETリクエスト

という事を 押さえておきましょう。

そして、この 図の
❸・❹ は Webコンテナの仕事となりますので…

私達 Webアプリ開発者は ❶・❷ を
すれば良い こととなります。

❷ の URLパターンとサーブレットの紐づけは
次のコーナーで お話します。

ここでは、サーブレットの作成について
確認しておきましょう。

サーブレットを定義する時には…

必ず javax.servlet.http パッケージの
HttpServlet を 継承して クラスを作成します。

HttpServlet クラスは 抽象クラスで
サーブレットの雛形となるクラスです。

そして、必要に応じて doGet() メソッド
doPost() メソッドをオーバーライドして…

…該当サーブレット 独自の処理 を実装します。

GETリクエストに対応した処理を
doGet() に定義して…

POSTリクエストに対応した処理を
doPost() に定義します。

このあたりは、eclipse を使うと
間違えずに 作成できます。

【3】 URLマッピング

次に、URLマッピングについて見ていきましょう。

URLマッピングとは何か

…ですが、これは
URLパターンとサーブレットを結びつけることです。

先ほど、URLパターンに応じたサーブレットが動く
というお話をしましたが…

そのために…

URLパターンと サーブレットを
結びつける必要があります。

この事を URLマッピングと言います。

そして、このURLマッピングの方法としては…

@WebServlet アノテーションを使います。

サーブレット定義の直前に

@WebServlet 丸括弧 ダブルクォーテーション で
/URLパターン を記述します。

この事によって、URLパターンと
サーブレットが結びつくこととなるのです。

ここでは、サーブレットの doGet() メソッド
doPost() メソッド実行までのイメージを見ておきましょう。

HTTP通信で リクエストを出す時に
Webブラウザでは URLを指定します。

この時に、サーバ名によって サーバを特定して…

コンテキストルート(名)は Webアプリ毎に
決められているので Webアプリを特定します。

そして、URLパターン に対応するサーブレットは…

@WebServletアノテーションによって
サーブレットにURLマッピングされて特定できます。

また、呼び出すメソッドは
リクエストの種類によって…

doGet()メソッド または doPost()メソッド
が選ばれる事となります。

このイメージ、基本になりますので
押さえておきましょうね。

彩香
サーブレットは何か。定義の方法。URLマッピング。
一通り理解しました。順々に考えれば大丈夫そうです。
剛留
今までの知識の 集大成という感じですね。
復習もしながら進めていきます。

【4】 レスポンスの生成

サーブレットの中での
レスポンスの生成について 見ていきましょう。

サーブレットの
doGet()メソッド、doPost()メソッドは…

リクエストに関する情報 と レスポンスに
関する情報 を パラーメータで受け取ります。

✅ リクエストに関する情報は
  HttpServletRequest型の request
✅ レスポンスに関する情報は
  HttpServletResponse型の response

です。

このうち、私たちは response を使って
レスポンス内容を作ることとなります。

続いて、このレスポンス生成 3ステップを
見ていきましょう。

① コンテンツタイプ&エンコーディング方式を設定

レスポンスが、text 文字の情報で html である事と
文字コードが UTF-8 であることを示します。

response の setContentType() メソッドを使用します。

② 内容 書き出しオブジェクトの取得

response の getWriter() メソッドを呼び出して…

レスポンス内容を書き出す
PrintWriter型の オブジェクトを取得します。

③ 内容 書き出し

②で取得した PrintWriter型オブジェクト
(この例では 変数 out としている部分です)の…

println() メソッドを使って、HTMLのコンテンツを
書き出していきます。

この①~③をしておくと、後は Webコンテナが
レスポンスを クライアント側に 送り出してくれるのです。

【まとめ】

【1】 サーブレットとは
✅ Webコンテナ上で動く
  JavaによるWebアプリの一部。

✅ リクエストに応じた処理をする
  Javaプログラム。

【2】 サーブレット定義
✅ HttpServlet クラスを
  継承して クラスを作成する。

✅ 必要に応じて doGet() と
  doPost() をオーバーライドする。

【3】 URLマッピング
✅ URLパターンとサーブレットを
  結びつけること。

✅ @WebServlet アノテーション
  を使う。

【4】 レスポンスの生成
3ステップで行う。

① コンテンツタイプ&
  エンコーディング方式を設定。

② 内容 書き出し
  オブジェクトの取得。

③ 内容 書き出し。