これまでJavaScriptでクライアントサイドのアプリケーションを作ってきたが、どうしてもサーバで動かしたい機能もある。そこで、Eclipseでサーブレットを作ってみる。
- サーブレットプログラムをプロジェクトに追加する(Java)
Eclipseでプロジェクトを作る時に「Webアプリケーション」を選択した。プロジェクトエクスプローラの’src’の下に設定したパッケージが表示されているので、その下にJavaのクラスを追加していく。 - サーブレットクラスを新規追加する
クラス名は任意につけられるが、分かりやすいように機能の名前をサーブレット名とし、末尾に’Servlet’をつける。今回は、GAEのデータストアの内容(チェックイン予定の一覧)を取得するサンプルを作ってみるので、サーブレット名を’ViewSpotPlan’とし、クラス名を ‘ViewSpotPlanServlet’とした。
サーブレットはHttpServletクラスのサブクラスとして作成する。スーパークラスの横の参照ボタンをクリックして選択する。’httpservlet…’と打っていくと、候補となるパッケージ名が表示される。
・パッケージ:com.appspot.triplifeplan (今回から新パッケージに移行した)
・クラス名:ViewSpotPlanServlet
・スーパークラス:javax.servlet.http.HttpServlet
ここまで完了すると、クラスの雛形が出来上がる。// Java package com.appspot.triplifeplan; import javax.servlet.http.HttpServlet; public class ViewSpotPlanServlet extends HttpServlet { }
- サーブレットクラスを完成させる
ブラウザからのGETリクエストに応答するdoGet()メソッドを実装する。// Java public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.setCharacterEncoding("UTF-8"); resp.getWriter().println("Hello, world. I'm ViewPlanSpot class."); // 以下省略 }
- サーブレット名とクラスを関連付ける(web.xmlファイルに登録する)
サーブレット名(ViewSpotPlan)と、作成したJavaクラスを関連付ける。具体的には、/war/WEB-INF/web.xml ファイルの記述を追加する。Eclipseでファイルを選択し、「アプリケーションから開く」-「XMLエディター」で開くと、グリッド形式のエディタが開く。(その他のエディタでも適宜編集可能。)
ルートノード’web-app’を選択して、「子の追加」からメニューを下にたどっていき、属性「servlet」を追加する。この属性には2つの子属性があり、以下のように記述する。(クラス名はパッケージ名を含めたフルパスで記述する。)servlet-name: ViewSpotPlan servlet-class: com.appspot.tripliferec.ViewSpotPlanServlet
- サーブレット名とURLを関連付ける(web.xmlファイルに登録する)
サーブレット名とブラウザからアクセスする際のURLを関連付ける。上記と同じように web.xml に追加する。servlet-name: ViewSpotPlan url-pattern: /viewSpotPlan
ここではURLを’/viewSpotPlan’としたが、名前は適宜で可。
- ブラウザからアクセスする
ここまで実施すると、(ホスト名)/viewSpotPlanでサーブレットを実行できる。例えば、ローカルサーバ(ポート:8888)の場合、http://localhost:8888/viewSpotPlanでアクセスできる。なお、コードを書き換えた場合は、Webサーバの再起動(停止&起動)が必要。 - (用語)サーブレット
ブラウザからのリクエストを受け付けて、サーバで処理を行い、その結果をブラウザに返すプログラム。よく使うのは、リクエストを受け付けてHTMLページを生成し、ブラウザでそれを表示するパターンだが、今回はページそのものはjQuery/jQuery Mobileで作成しているので、サーブレットではGoogle App Engineのデータストアとのアクセスのみ行う。