GETとPOST
- 2010-12-01 Wed 14:26:37
- データのやり取り
「サーブレットの骨組み」にも書いたように、ブラウザからサーバへのリクエストメソッドにはGETとPOSTがあり、これによりサーブレットではdoGet()やdoPost()といったメソッドが呼ばれます。
JSPとサーブレットのやり取りでいえば、JSPからGETやPOSTのリクエストメソッドにより、サーブレットのdoGet()やdoPost()といったメソッドが呼ばれることになります。
doGet()メソッドとdoPost()メソッドの違いはやや微妙ではあります。
doGet()はデフォルトです。何も指定しなければdoGet()メソッドが呼ばれます。
doGet()メソッドが呼ばれる場合としては、
- ブラウザのアドレスバーに直接入力
- リンクのクリック
- フォームを使うとき、
doPost()メソッドが呼ばれるのは、
- フォームを使うとき、
それでは、上の違いを体感するためのソースを書きましょう。「form_entry」パッケージの下に「GetPost.java」というサーブレットを作り、「form_entry」フォルダの下に「GetPost.jsp」というJSPファイルを作成してください。
web.xmlを設定する
「<web-app> ~ </web-app>」の間に以下のソースを書き加えます。
<servlet>
<servlet-name>GetPost</servlet-name>
<servlet-class>form_entry.GetPost</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetPost</servlet-name>
<url-pattern>/GetPost</url-pattern>
</servlet-mapping>
サーブレットのソースを書く
package form_entry;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetPost extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
System.out.println("doGet()メソッド実行"); //(1)
common(request,response); //(2)
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
System.out.println("doPost()メソッド実行");
common(request,response);
}
private void common(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{ //(3)
request.setCharacterEncoding("Windows-31J");
String msg=request.getParameter("message");
response.setContentType("text/plain;charset=Windows-31J");
PrintWriter out=response.getWriter();
out.println("message="+msg);
}
}
このサーブレットでは、doGet()およびdoPost()メソッドでブラウザから送信されたデータを受け取り、受け取ったメッセージの内容を表示する処理を行っています。
//(1)では、doGet()メソッドを行ったのか、doPost()を行ったのか、Eclipseのコンソール画面に出力して確認することができるようにしています。
さらに、受け取ったデータの処理方法はdoGet()メソッドでも、doPost()メソッドでも同じなので、共通処理としてcommon()メソッドを定義したのが //(3) です。
JSPファイルを書く
<%@page contentType="text/html; charset=Windows-31J" %>
<html><body>
<h3>GETリクエスト</h3>
<a href="../GetPost?message=GetLink">リンクでGETをリクエスト</a><br>
このリンクをクリックするとmessage=GetLinkと表示されます。
<form action="../GetPost" method="get">
<input type="text" name="message" value="何か入力してください" onFocus="this.value=''">
<input type="submit" value="フォームでGETリクエスト">
</form>
<h3>POSTリクエスト</h3>
<form action="../GetPost" method="post">
<input type="text" name="message" value="何か入力してください" onFocus="this.value=''">
<input type="submit" value="フォームでPOSTリクエスト">
</form>
</body></html>
まず、GETリクエストから見ていきます。
リンクによる方法は、<a href="../GetPost?message=GetLink"></a>というリンクを張りました。GetPost.javaの相対パスの後ろに、「?message=GetLink」という文字(これが入力パラメータです)をつけています。
入力パラメータは、ブラウザのアドレスバーの部分で指定することもできます。
http://localhost:8080/siroto/GetPost?message=GetLink
とアドレスバーに入力して実行してみてください。
message=GetLink
とブラウザに表示されるはずです。
このように、日本語データの送信で少し学習した入力パラメータとは、URLの後ろで
?名前=値
の形式でブラウザから渡されるものなのです。
フォームによるリクエストについては、GETが「method="get"」、POSTが「method="post"」と
タグ : JavaScript
Comments:
このコメントは管理者の承認待ちです