Java Servlet(サーブレット)は、Webサーバ上で動的にWebページを生成したり、データ処理を行うためにJavaで作成されたプログラムの仕様です。単にサーブレットと呼ばれることが多いです。Jakarta EEの中のひとつの機能という位置づけになっています。
サーブレットの特徴は以下の通りです。
サーブレットクラスの作成には、いくつかのルールに従って定義する必要があります。
まず、サーブレット関係のクラスであるHttpServlet、HttpServletRequest、HttpServletResponse、HttpServletExceptionをインポートします。Eclipseでサーブレットを作成すると、自動的にインポート文でこれらが挿入されます。
サーブレットは、HttpServletクラスを継承します。継承することで、サーブレットクラスという特別なクラスを1から作成する必要がなくなります。この継承もEclipseでは、自動的に設定されます。
HTTPのリクエストメソッドに対応したメソッドを実装します。リクエストメソッドがGETであればdoGetメソッドを、リクエストメソッドがPOSTならdoPostメソッドを実装します。
doGetメソッドは、GETメソッドで呼び出され、データはURLパラメータとして送信されます。主に参照系の処理に使用されます。また、doGetはvoid型で、キャッシュが可能です。
doPostメソッドは、POSTメソッドで呼び出され、データはHTTPリクエストボディとして送信されます。主に更新系の処理に用いられます。doPostはvoid型またはHttpServletResponse型で、キャッシュは不可です。
サーブレットでHTMLを出力するには、response.setContentType("text/html; charset=utf-8")の1文は必須となります。
HTMLの内容を出力する処理には、PrintWriter out = response.getWriter(); の1文を入力します。HttpServletResponseオブジェクトのgetWriterメソッドは、クライアントへ送信する文字データを出力するためのPrintWriterオブジェクトに返します。PrintWriterオブジェクトは、文字データを出力するためのオブジェクトで、取得したオブジェクトを変数outに代入しています。
out.println()のoutはPrintWriterオブジェクトで、println()はPrintWriterオブジェクトのメソッドで、引数に書かれた文字列と改行を出力します。
サーブレットは、大量のリクエストを受け付けた場合、パフォーマンスが低下する可能性やリクエストを受け付けるごとにオブジェクトを生成するため、メモリの使用量が増加する恐れがあります。