ServletによるGET受信処理

 Servletは、JavaプログラムにHtml文書を埋め込む形で記述します。そのため、ロジックを重視したプログラムが書きやすくなっています。

 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」ボタンをクリックします。すると、ソースが追加されるので、追加されたメソッド内にプログラムを記述します。

追加するメソッドを選択する
追加するメソッドを選択する

 次のように追加したメソッドにプログラムを記述してください。

  1. package test.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class GetServlet extends HttpServlet {
  9.  @Override
  10.  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11.   //クライアントに出力する準備
  12.   resp.setContentType("text/html; charset=utf-8");
  13.   PrintWriter pw = resp.getWriter();
  14.   //クライアントにHtmlタグを書き出し
  15.   pw.println("GET送信の応答です。");
  16.  }
  17. }

〇 Webアプリケーション設定ファイルの編集

 web.xmlに次の内容を追加してください。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6.   version="3.1">
  7.  <servlet>
  8.   <servlet-name>Servlet</servlet-name>
  9.   <servlet-class>test.servlet.ServletTest</servlet-class>
  10.  </servlet>
  11.  <servlet-mapping>
  12.   <servlet-name>Servlet</servlet-name>
  13.   <url-pattern>/servlettest</url-pattern>
  14.  </servlet-mapping>
  15.  <servlet>
  16.   <servlet-name>GetServlet</servlet-name>
  17.   <servlet-class>test.servlet.GetServlet</servlet-class>
  18.  </servlet>
  19.  <servlet-mapping>
  20.   <servlet-name>GetServlet</servlet-name>
  21.   <url-pattern>/getservlet</url-pattern>
  22.  </servlet-mapping>
  23. </web-app>

〇 実行結果

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 リクエストに関連付けられているセッションオブジェクトを取得する
HttpServletRequestインタフェースの主なメソッド

 HttpServletResponseインタフェースには主に次のようなメソッドが用意されています。

メソッド名 説明
addCookie レスポンスに指定されたクッキーを追加する
getWriter 文字データをクライアントに送り返すのに使用するPrintWriterオブジェクトを取得する
setContentType クライアントに送るコンテントタイプをセットする。getWriterメソッドを呼び出す前にこのメソッドを呼び出した場合のみ、指定したコンテントタイプが設定される
HttpServletResponseインタフェースの主なメソッド

 Servletでは作成したファイルを呼び出すには、Webサーバーにクラスファイルを登録する必要があります。そのために「web.xml」ファイルで指定します。次のようなタグを使います。

タグ名 説明
servlet Servlet名、Servletのクラス名を指定する
servlet-name サーバー内で扱うServlet名を指定する
servlet-class サーバー内で扱うServlet名に対するServletクラスを指定する
servlet-mapping クライアントからの要求と、サーバー内のServletのマッピング名を指定する
url-pattern クライアントが指定する要求の内容を指定する
HttpServletResponseインタフェースの主なメソッド

 今回作成したファイルを再び確認しましょう。16行目では、HttpServletResponseインタフェースのsetContentTypeメソッドを呼び出しています。ここでコンテントタイプとしてHtmlファイル、文字コードはUTF-8を指定しています。

 17行目ではHttpServletResposeインタフェースのgetWriterメソッドを呼び出しています。結果としてUTF-8で書き込みのできるPrintWriterオブジェクトが取得でき、このオブジェクトのメソッドを使ってクライアントに送りたい情報を設定します。

 20行目では、PrintWriterクラスのprintlnメソッドを使って、Html情報を書き出しています。これによりクライアント側のWebブラウザーに書き出した内容が表示されるようになります。

前へ   次へ