doGetメソッドとdoPostメソッド
サーブレットが呼ばれた時に「doGet」メソッドと「doPost」メソッドが呼ばれるの様子を実際に確認してみます。
次のような簡単なサーブレットを用意しました。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Sample1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println(createHTML("GET")); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println(createHTML("POST")); out.close(); } protected String createHTML(String methodType){ StringBuffer sb = new StringBuffer(); sb.append("<html>"); sb.append("<head>"); sb.append("<title>サンプル</title>"); sb.append("</head>"); sb.append("<body>"); sb.append("<p>"); sb.append(methodType); sb.append("メソッドで呼び出されました</p>"); sb.append("<p><a href=\"/sample/Sample1\">リンク</a></p>"); sb.append("<form action=\"/sample/Sample1\" method=\"get\">"); sb.append("<input type=\"submit\" value=\"GETで送信\">"); sb.append("</form>"); sb.append("<form action=\"/sample/Sample1\" method=\"post\">"); sb.append("<input type=\"submit\" value=\"POSTで送信\">"); sb.append("</form>"); sb.append("</body>"); sb.append("</html>"); return (new String(sb)); } }
このサンプルはサーブレットが呼ばれた時に、呼ばれた時に使われたHTTPメソッドを表示するものです。
このサーブレットが含まれるアプリケーションの配置場所として「D:\servlet-sample\sample\」ディレクトリとします。先ほどのサンプルプログラムをコンパイルして作成した「Sample1.class」ファイルと別途作成した「web.xml」ファイルを次のように配置します。
D:\ -- servlet-sample | +-- WEB-INF | +-- (web.xml) | +-- classes | +-- (Sample1.class)
web.xmlファイルは次のようになります。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>Sample1</servlet-name> <servlet-class>Sample1</servlet-class> </servlet> <servlet-mapping> <servlet-name>Sample1</servlet-name> <url-pattern>/Sample1</url-pattern> </servlet-mapping> </web-app>
コンテキストファイルを作成し「(Tomcatをインストールしたディレクトリ)\Tomcat 5.5\conf\Catalina\localhost\」ディレクトリに「sample.xml」ファイルとして保存します。内容は以下の通りです。
<Context path="/sample" docBase="d:/servlet-sample/sample"> </Context>
準備は以上です。ではTomcatを再起動してから「http://localhost:8080/sample/Sample1」へブラウザでアクセスして下さい。
このようにサーブレットを直接指定して呼び出した場合は「GET」メソッドを使って呼び出します。
次にリンクが張っている箇所をクリックして下さい。
リンクにもサーブレット名が記載されていますのでブラウザで直接指定した場合と同じです。よって「GET」メソッドで呼び出されます。
次に「GETで送信」ボタンをクリックして下さい。これはフォームで「GET」を使って送信した場合です。
この場合も「GET」メソッドで呼び出されます。
最後に「POSTで送信」ボタンをクリックして下さい。これはフォームで「POST」を使って送信した場合です。
この場合は「POST」メソッドで呼び出されます。
このようにサーブレットが呼び出された時には、その呼び出された時のHTTPメソッドによって「doGet」メソッド又は「doPost」メソッドが自動的に呼び出されて実行されます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。