最終更新日:170616 原本 

doGetメソッドとdoPostメソッド

サーブレットが呼ばれた時に「doGet」メソッドと「doPost」メソッドが呼ばれるの様子を実際に確認してみます。

次のような簡単なサーブレットを用意しました。

Sample1.java

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=UTF-8");
    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=UTF-8");
    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/sample¥">リンク</a></p>");

    sb.append("<form action=¥"/sample/sample¥" method=¥"get¥">");
    sb.append("<input type=¥"submit¥" value=¥"GETで送信¥">");
    sb.append("</form>");

    sb.append("<form action=¥"/sample/sample¥" method=¥"post¥">");
    sb.append("<input type=¥"submit¥" value=¥"POSTで送信¥">");
    sb.append("</form>");

    sb.append("</body>");
    sb.append("</html>");

    return (new String(sb));
  }
}

次にコマンドプロンプトを使い、ソースファイルを保存したディレクトに移動してから、下記のコマンドを実行します。

$ javac -encoding utf-8 -classpath "C:¥Program Files¥Tomcat 8.5¥lib¥servlet-api.jar" Sample1.java

この出来上がったclassファイルを「c:¥servlet-sample¥sample¥WEB-INF¥classes¥」に置きます。

このサンプルはサーブレットが呼ばれた時に、呼ばれた時に使われたHTTPメソッドを表示するものです。

このサーブレットが含まれるアプリケーションの配置場所として「C:¥servlet-sample¥sample¥」ディレクトリとします。先ほどのサンプルプログラムをコンパイルして作成した「Sample1.class」ファイルと別途作成した「web.xml」ファイルを次のように配置します。

C:¥ -- servlet-sample
        |
        +-- sample
            |
            +-- WEB-INF
                 |
                 +-- (web.xml)
                 |
                 +-- classes
                      |
                      +-- (Sample1.class)

web.xmlファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<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>/sample</url-pattern>
  </servlet-mapping>
</web-app>

コンテキストファイルを作成し「C:¥Program Files¥Tomcat 8.5¥conf¥Catalina¥localhost¥」ディレクトリに「sample.xml」ファイルとして保存します。内容は以下の通りです。

<Context path="/sample"
docBase="c:/servlet-sample/sample">
</Context>

準備は以上です。ではTomcatを再起動してから「http://localhost:8080/sample/sample」へブラウザでアクセスして下さい。

GETとPOST

このようにサーブレットを直接指定して呼び出した場合は「GET」メソッドを使って呼び出します。

次にリンクが張っている箇所をクリックして下さい。

GETとPOST

リンクにもサーブレット名が記載されていますのでブラウザで直接指定した場合と同じです。よって「GET」メソッドで呼び出されます。

次に「GETで送信」ボタンをクリックして下さい。これはフォームで「GET」を使って送信した場合です。

GETとPOST

この場合も「GET」メソッドで呼び出されます。

最後に「POSTで送信」ボタンをクリックして下さい。これはフォームで「POST」を使って送信した場合です。

GETとPOST

この場合は「POST」メソッドで呼び出されます。

このようにサーブレットが呼び出された時には、その呼び出された時のHTTPメソッドによって「doGet」メソッド又は「doPost」メソッドが自動的に呼び出されて実行されます。