サーブレットとは
サーブレットはWebコンテナ上で動作するJavaで記述されたプログラムのこと。HTMLタグを埋め込むことで画面を作成できる。
主なサーブレットAPIは以下。
Servletインタフェース
サーブレットの基本となるインタフェースで、全てのサーブレットが実装すべきメソッドを定義している。
GenericServletクラス
Servletインタフェースの実装クラスで、HTTP以外のプロトコルにも対応可能な汎用的な機能を提供する。
HttpServletクラス
GenericServletを継承し、HTTPプロトコルに特化したサーブレットの基盤クラス。GETやPOSTといったHTTPメソッドに対応するメソッドを提供。
サーブレットのライフサイクル
-
初期化
インスタンス化時に一度実行 -
サービス処理
サーブレットに対するリクエストを処理 -
要求待ち
1度実行したサーブレットはWebコンテナに常駐し、次のリクエストを待つ -
消滅処理
サーブレット停止前に実行される処理
サーブレットのメソッド
service(req,res)
req…リクエスト格納
res…レスポンス格納
サーブレットの処理を記述する。またリクエストによっては後述のdoGetやdoPostを呼び出す。
init(config)
config…サーブレットに関する各種情報を持つオブジェクト
初期化処理を記述する。
destroy()
サーブレットの後処理記述。
getServletConfig()
サーブレットの開発者や著作権などの情報を文字列で返す。
getServletConfig()
初期化パラメータを読みこんだり、サーブレットの実行環境にアクセスしてServletConfigオブジェクトを取得する。
doGet(req,res)
GETオペレーションに対するサーブレット処理を記述。
doPost(res,req)
POSTオペレーションに対するサーブレット処理を記述。
req.setCharacterEncoding("UTF-8")
エンコーディングの設定。
req.getParameter("name")
リクエストオブジェクトから名前で指定したパラメータの値を返す。
req.getParameterValues("name")
リクエストオブジェクトから名前で指定した全てのパラメータの値を返す。
req.getParameterNames()
リクエスト中の全てのパラメータ名を取得。
res.setContentType("text/html,charset=UTF-8")
サーブレットのレスポンスに対して コンテンツタイプ(MIMEタイプ) と 文字エンコーディング を設定する。
res.getWriter()
テキストデータをクライアントに出力するストリームを返す。
pw.println("")
テキストデータをクライアントに出力。printメソッドだと改行はなし。
リクエストオブジェクトとは
ServletRequest を拡張し、HTTPプロトコルに特化した機能を提供するインターフェース。
HTTPリクエストに固有のメソッド(HTTPメソッド、ヘッダー情報、セッション情報など)を利用できる。
setAttribute("fullName",fullName)
リクエストオブジェクトに値を設定。
(String)req.getAttribute("fullName")
リクエストオブジェクトから値を取得。
RequestDispatcher rd = req.getRequestDispatcher("/outhello")
引数のパスにフォワードする。
req.forward(req,res)
リクエストを別のリソースに転送。
セッション管理
セッション
サーバ側でセッションIDを生成し、クライアントにセッションIDを渡す(クッキーやURLパラメータを利用)。
クライアントからのリクエスト時にセッションIDを使用して、適切なセッションデータを関連付ける。
req.getSession()
セッションオブジェクトを返す。引数がtrueだとセッションオブジェクトが無い場合、新規にHttpSessionオブジェクトを生成。falseの場合、セッションオブジェクトが無い場合nullを返す。
session.setAttribute("name",name)
セッションオブジェクトに値を格納。
(String)session.getAttribute("name")
セッションオブジェクトから値を取得。
session.removeAttribute("access")
セッションオブジェクトから値削除。
session.invalidate()
明示的にセッションオブジェクト破棄。