【Java & Tomcat】サーブレットでGetとPost両方に対応する(サンプルコード付き)

  • このエントリーをはてなブックマークに追加
  • Pocket

ひとつのサーブレットでGETとPOST、両方に対応する事は可能なのだろうか。ここではその方法について説明する

GETとPOST両方に対応する方法

GETリクエストとPOSTリクエストの両方をひとつのサーブレットで処理することは可能である。Webコンテナは、GETを受け付けた時はサーブレットのdoGet()メソッドを呼び出し、POSTの時はdoPost()メソッドを呼び出す。このサーブレットの親クラスのHttpServletメソッドをオーバーライドすればよい。

GETとPOST両方に対応するサンプルプログラム

このサンプルプログラムは、クライアントからリクエストメソッドのGETとPOSTの両方を受け付ける。

リクエストでGETをdoGet()で受けた時は、現在の番号の値を表示し、同じ画面で新規の番号の入力を行う。この画面で変更ボタンが押されると、リクエストがPOSTで新規の番号とともにサーブレットに送られる。サーブレットは、doPost()によって新規の番号で現在の番号を更新し、更新された番号を表示する。

サーブレットの配置とプログラムのコードは次のようになっている。

ひとつのサーブレットにGETリクエストとPOSTリクエストの両方の処理が入ったコードを以下に示す。

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("/GetAndPostServlet")//[1]
public class GetAndPostServlet extends HttpServlet {//[2]
    static String number = "1234";//[3]
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {//[4]
        response.setContentType("text/html; charset=Shift_JIS");//[5]
        PrintWriter out=response.getWriter();//[6]
        out.println("<head><title>Input</title></head>");//[7]
        out.println("<body>");//[8]
        out.println("<form method=\"POST\">");//[9]
        out.println("<h2>新規の番号を入力してください</h2>");//[10]
        out.println("<p></p>");//[11]
        out.println("現在の番号:" + number);//[12]
        out.println("<p></p>");//[13]
        out.println("新規の番号:");//[14]
        out.println("<input title=\"新規の番号:\" type=\"text\" name=\"number\" size=\"25\">");//[15]
        out.println("<p></p>");//[16]
        out.println("<input type=\"submit\" value=\"変更\">");//[17]
        out.println("</form>");//[18]
        out.println("</body></html>");//[19]
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {//[40]
        number = request.getParameter("number");//[41]

        response.setContentType("text/html; charset=Shift_JIS");//[42]
        PrintWriter out=response.getWriter();//[43]
        out.println("<head><title>Join</title></head>");//[44]
        out.println("<body>");//[45]
        out.println("<form method=\"GET\">");//[46]
        out.println("<h2>更新された番号:" + number + "</h2>");//[47]
        out.println("<input type=\"submit\" value=\"完了\">");//[48]
        out.println("</form>");//[49]
                       out.println("</body></html>");//[50]

    }
}

実行結果

ブラウザにURL:http://localhost:8080/Servlet/GetAndPostServlet を入力し、Enterを押す。

表示されるブラウザ画面:

「新規の番号:」の入力フィールドに「5678」と入力する。そして、変更ボタンを押すと、次の画面が表示される。

表示されるブラウザ画面:

更新された新規の番号が表示される。完了ボタンを押すと、新規の番号入力画面が表示される。

表示されるブラウザ画面:

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] @WebServletアノテーションでurlPatternの宣言をする。
  • [2] HttpServletを継承して、GetAndPostServletクラスを定義する。
  • [3] 文字列変数numberを、初期値:1234で宣言する。
  • [4] doGet()メソッドをオーバーライドして定義する。
  • [5] Content Typeに「text/html; charset=Shift_JIS」を設定する。
  • [6] HTMLを出力するためのoutオブジェクトを取得する。
  • [7]-[8] 現在の番号の値を表示する。
  • [9] 画面フォームからの入力が、リクエストのPOSTメソッドとして送られるように設定する。
  • [10]-[19] 同じ画面で新規の番号の入力を行う画面のHTMLをoutオブジェクトに出力する。

 

  • [40] doPost()メソッドをオーバーライドして定義する。
  • [41] パラメータIdがnumberの文字列を取得して、フィールドnumberに設定する。
  • [42] Content Typeに「text/html; charset=Shift_JIS」を設定する。
  • [43] HTMLを出力するためのoutオブジェクトを取得する。
  • [44]-[45] 画面フォームからの入力が、リクエストのGETメソッドとして送られるように設定する。
  • [46]-[50] 更新された番号を表示する画面のHTMLをoutオブジェクトに出力する。

まとめ

doGetとdoPostの処理を1つのサーブレットに書くことでWebブラウザからどちらのリクエストが来ても処理できるようになった事がよくわかると思う。応用の利くプログラムなので、サンプルを基に色々と改造してみよう。

 

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する