Eclipse で サブレット をしてみる

柴犬は、いつもと違うことに気が付きました。

視線の向こうにはこれが見えました。

なんだあれは????? と相当気にしているようです。
概要
サーブレットを行ってみたところ、相当に手古摺りました。
ちょっと泥沼状態になりましたが、なんとか這い上がれましたので記録します。
青枠のところにあったサーバーがない
いろいろ触っていると不用意にウィンドウを削除(非表示)にしたことが度々あったので復旧の方法を記録します。

ターゲット・ランタイムのリストから
不要なものを除去
初心のうちは、設定が分からず「新規ランタイム」で作らなくてもいいターゲット・ランタイムを作ってしまうことがありました。左の青枠のサーバーを削除するにも関わらず残ったままです。
消し方が分からず苦労したので記録します。
ここでは、Apache Tomcat v7.0(2) が不要となりました。

メニューバーのタブ「ウィンドウ」→「設定」とクリックします。

フォーム「設定」が開きます。
「サーバー」→「ランタイム環境」→除去したい行を選択→「除去」をクリックします。
最後「適用して閉じる」をクリックします。

プロジェクトを Tomcat7 以上で作成
URLパターンに @WebServlet アノテーションを使いたいので、ターゲット・ランタイムを Tomcat7 以上にします。これに気づくのに相当かかりました。
ボタン「次へ」を押下します。

ここでは何もせずにボタン「次へ」を押下します。

「web.xlm デプロイ面と記述しの生成」にチェックを入れます。
ボタン「完了」を押下します。

サーバーの作成
前回のサーバーの作成と同じ手順で「Tomcat v7.0 サーバー」を選択します。
Servlet の作成
「プロジェクト・エクスプローラ」→「sample」→「新規」→「サーブレット」とクリックします。

フォーム「サーブレット作成」が開きます。
「Java パッケージ」「クラス名」を適宜入力します。
ボタン「次へ」を押下します。

何もせずにボタン「次へ」を押下します。

「スーパークラスからのコントラクター」「doPost」のチェックを外して、ボタン「完了」を押下します。

中央の赤枠のところに自動的に既定のコードが入ります。

既定のコードは次のような内容です。
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class SampleServlet */ @WebServlet("/SampleServlet") public class SampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } }
これを次のように書き換えます。
package 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; /** * Servlet implementation class SampleServlet */ @WebServlet("/SampleServlet") public class SampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head></head>"); out.println("<body>"); out.println("<p>Sample</p>"); out.println("<p>Hello World!</p>"); out.println("</body>"); out.println("</html>"); } }
次のコードの記述がなく PrintWriter の行があると赤マルの警告がでます。またインポートするかと助言があるので助言文をクリックしてインポートします。
import java.io.PrintWriter;

編集が終わったら、メニューバーのタブ「ファイル」→「すべて保存」をクリックして保存します。

Servlet の実行
サーバーに公開します。
中央下のタブ「サーバー」→「停止」→「クリーン」→「公開」→「開始」とクリックしていきます。

メッセージが「始動済み」に変化します。

いよいよブラウザに出してみます。
プロジェクト・エクスプローラ→「sample」→展開→「SampleServlet]→「実行」→「サーバーで実行」とクリックします。

成功です。これを見たときはうれしかったです。やったと叫びたくなりました。

少でも間違えると、次のようなエラーが発生します。私は、これを何十回と見ました。
一定の手順が必要なようで、慣れるのはなかなか難しそうです。
