Revised: 14th/June/2002
POST メソッドでデータを送るフォームの HTML ソースです。これを、テキスト・エディタにコピーして、ドキュメント・ルート /webAppl
の post.html
に保存してください。Tomcat のインストール・ディレクトリの conf ディレクトリの中の servlet.xml
で、ドキュメント・ルートが C:/DocRoot
に指定されている場合は、C:\DocRoot\post.html
になります。保存時に文字コードが指定できる場合は Shift_JIS (SJIS) を選んでください。
GET メソッドとの違いは、 form 要素の開始タグに method="POST"
の記述があるところです。
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" > <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS" /> <title>POST メソッドのフォーム</title> </head> <body> <h1>HTTP POST メソッド</h1> <form action="/webAppl/servlet/PostDemo" method="POST"> <p>POST メソッドのフォームの例</p> <table> <tr><th>name:</th><td><input type="text" name="namae" size="30" /></td></tr> <tr><th> age:</th><td><input type="text" name="toshi" size="2" maxlength="2" /></td></tr> <tr><th> sex:</th><td><input type="radio" name="sei" value="male" />male <input type="radio" name="sei" value="female" />female</td></tr> <tr><th>message:</th><td><input type="text" name="memo" size="50" /></td></tr> <tr><td></td><td><input type="submit" name="submit" value="送信" /></td></tr> </table> </form> </body> </html>
これは、このページを置いたサーバのリソース "/webAppl/servlet/PostDemo
" に、 POST メソッドでデータを送信するフォームです。Tomcat の場合は、 /webAppl
にマップされたドキュメント・ルート内の WEB-INF/classes
内の PostDemo.class
になります。
上記フォームの表示例です。
上記 HTML ソースは"/webAppl/servlet/PostDemo
" にデータを送信するフォームなので、 /webAppl
にマップされたドキュメント・ルート内の WBE-INF/classes
内に、次の PostDemo.class
をコンパイルして保存しておきましょう。ドキュメントルートが C:/DocRoot
になっている場合、保存場所は C:\DocRoot\WEB-INF\classes\PostDemo.java
です。
GET メソッドのハンドリングは doGet()
メソッドを使いましたが、 POST メソッドは doPost()
メソッドを使います。メソッドの内容は変わりません。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class PostDemo extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// 要求文字コードのセット
req.setCharacterEncoding("Shift_JIS");
// 応答文字コードのセット
res.setContentType("text/html; charset=Shift_JIS");
// 出力ストリームの取得
PrintWriter out = res.getWriter();
String title = "HTTP POST メソッド・デモ";
// フォームデータの取得
String[] msg = new String[8];
msg[0] = "名前";
msg[1] = req.getParameter("namae");
msg[2] = "年齢";
msg[3] = req.getParameter("toshi");
msg[4] = "性別";
msg[5] = req.getParameter("sei");
msg[6] = "メモ";
msg[7] = req.getParameter("memo");
// クライアント(ブラウザ)への出力
out.println("<html lang=\"ja\">");
out.println("<head><title>" + title + "</title>");
out.println("</head><body>");
out.println("<h1>" + title + "</h1>");
out.println("<table border=\"1\">");
for (int i = 0; i < 4; i++) {
out.println("<tr><th>" + msg[2 * i] + "</th><td>"
+ msg[2 * i + 1] + "</td></tr>");
}
out.println("</table>");
out.println("</body></html>");
// 出力ストリームを閉じる
out.close();
}
}
Tomcat のインストール・ディレクトリの conf
ディレクトリの中の servlet.xml
で、ドキュメント・ルートが C:/DocRoot
に指定されている場合は、次のようにコンパイルします。但し、 Tomcat のインストール・ディレクトリが C:\Program Files\Apache Tomcat 4.0
であるものとします。これはインストール時に特に設定しなかった場合のデフォルトです。
C:\>cd DocRoot\WEB-INF\classes C:\DocRoot\WEB-INF\classes>javac -classpath "C:\Program Files\Apache Tomcat 4.0\ common\lib\servlet.jar" PostDemo.java C:\DocRoot\WEB-INF\classes>
上記実行例の改行はウェブサイトでの公開の便宜上のものであり、実際は改行せずに連続して入力してください。また、OSの CLASSPATH 変数に設定すれば、コンパイル時の -classpath
オプションは不要です。
前掲の HTML 文書 post.html
へは次の URL でアクセスします。Tomcat が起動している事を確認して、ブラウザのアドレス窓に次の URL を入力してください。
http://localhost:8080/webAppl/post.html
開いた HTML 文書のフォームに適当なデータを入力して「送信」ボタンを押してください。
前掲の PostDemo.java
が実行されます。
![]() |
図:POST メソッドのフォームの入力例 |
このフォームを実行した場合のサーブレットによる出力結果は次のようになります。
<html lang="ja"> <head><title>HTTP POST メソッド・デモ</title> <meta http-equiv="text/html" content="text/html; charset=Shift_JIS" /> </head><body> <h1>HTTP POST メソッド・デモ</h1> <table border="1"> <tr><th>名前</th><td>菅井 学</td></tr> <tr><th>年齢</th><td>26</td></tr> <tr><th>性別</th><td>male</td></tr> <tr><th>メモ</th><td>好きなものは咒うか殺すか争うかしなければならないのよ。</td></tr> </table> </body></html>
![]() |
図:POST メソッドのサーブレットの実行例 |
POST メソッドの場合は、 URL とは別に標準入力からサーバにデータを送信するので、ブラウザのアドレス窓にはリソース要求の URL だけが表示されます。