ServeltによるGET受信処理
Servletは、JavaプログラムにHTML文書を埋め込む形で記述します。ロジックを重視したプログラムが書きやすくなっています。Webアプリケーション構成の「Controller」の役割を担わせることができます。
ServletはHttpServletクラスを継承して使用します。このクラスは次のようなメンバを持っています。
メソッド名 | 説明 |
---|---|
doGet(HttpServletRequest, HttpServletResponse) | サーブレットがGET要求を処理する際に呼び出される。 |
doPost(HttpServletRequest, HttpServletResponse) | サーブレットがPOST要求を処理する際に呼び出される。 |
この節では、Servletを使ってGET送信を処理する方法を見てみましょう。
○ ファイル
プロジェクトに次のようなServletを追加してください。
パッケージ名 | test.servlet |
---|---|
クラス名 | GetServlet |
スーパークラス名 | javax.servlet.http.HttpServlet |
○ プログラム
doGetメソッドを、追加したクラスに記述します。doGetメソッドの仕様に従って記述することができますが、Eclipseの機能を使って追加するメソッドを選択して記述させることもできます。エディターを右クリックして表示されるメニューより、「ソース(S)」―「メソッドのオーバーライド/実装(V)...」をクリックしてください。すると、次の図のようなダイアログボックスが表示されるので、「doGet(…)」メソッドにチェックを入れ、「OK」ボタンをクリックします。すると、ソースが追加されるので、追加されたメソッド内にプログラムを記述します。
次のように追加したメソッドにプログラムを記述してください。
GetServlet.java
- package test.servlet;
- 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("/getservlet")
- public class GetServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //クライアントへの出力準備をする
- resp.setContentType("text/html;charset=utf-8");
- PrintWriter pw = resp.getWriter();
- //クライアントにHTMLを書き出す
- pw.println("GET送信の応答です。");
- }
- }
○ 実行結果
コンテキストの定義を更新した後で、次のURLを入力して実行してみましょう。
http://localhost:8080/WebApp/getservlet
○ 解説
今回のサンプルはGET要求に対する処理をServletで行っています。URLに入力して要求をするとGET送信されるので、サーバーはServletからdoGetメソッドを呼び出します。doGetメソッドは引数にクライアントからの要求を表すHttpServletRequestオブジェクトと、クライアントへの応答を表すHttpServletRequestオブジェクトがセットされます。それらのオブジェクトを使ってクライアントから送られてきたデータを取得したり、クライアントにデータを送信したりします。
HttpServletRequestインタフェースには主に次のようなメソッドが用意されています。
メソッド名 | 説明 |
---|---|
getCookies | クライアントから送られてきた崛起オブジェクトの配列を取得する |
getHeader | リクエストヘッダーをString値として取得する |
getMethod | GET、POST、PUTのような、リクエストを生成したHTTPメソッド名を取得する |
getQueryString | リクエストのURLのパスの後ろに含まれているクエリ文字列を取得する |
getSession | リクエストに関連付けられているセッションオブジェクトを取得する |
HttpServletResponseインタフェースには主に次のようなメソッドが用意されています。
メソッド名 | 説明 |
---|---|
addCookie | レスポンスに指定されたクッキーを追加する |
getWriter | 文字データをクライアントに送り返すのに使用するPrintWriterオブジェクトを取得する |
setContentType | クライアントに送るコンテントタイプをセットする。getWriterメソッドを呼び出す前にこのメソッドを呼び出した場合のみ、指定したコンテントタイプが設定される |
今回作成したファイルを再び確認しましょう。18行目では、HttpServletResponseインタフェースのsetContentTypeメソッドを呼び出しています。ここでコンテンツのタイプとしてHTMLファイル、文字コードはUTF-8を指定しています。Webブラウザーはその情報を使って表示します。
19行目では、HttpServletResposeインタフェースのgetWriterメソッドを呼び出しています。結果としてレスポンス(応答)する情報を書き込みのできるPrintWriterオブジェクトが取得でき、このオブジェクトのメソッドを使ってクライアントに送りたい情報を設定します。
22行目では、PrintWriterクラスのprintlnメソッドを使って、HTML情報を書き出しています。これによりクライアント側のWebブラウザーに書き出した内容が表示されるようになります。