fc2ブログ

GETとPOST





サーブレットの骨組み」にも書いたように、ブラウザからサーバへのリクエストメソッドにはGETとPOSTがあり、これによりサーブレットではdoGet()やdoPost()といったメソッドが呼ばれます。

JSPとサーブレットのやり取りでいえば、JSPからGETやPOSTのリクエストメソッドにより、サーブレットのdoGet()やdoPost()といったメソッドが呼ばれることになります。

doGet()メソッドとdoPost()メソッドの違いはやや微妙ではあります。

doGet()はデフォルトです。何も指定しなければdoGet()メソッドが呼ばれます。

doGet()メソッドが呼ばれる場合としては、
  • ブラウザのアドレスバーに直接入力
  • リンクのクリック
  • フォームを使うとき、
    タグのmethod属性にGETを指定するか、何も指定しない場合
ということになります。

doPost()メソッドが呼ばれるのは、
  • フォームを使うとき、タグのmethod属性にPOSTを指定した場合
ということになります。

それでは、上の違いを体感するためのソースを書きましょう。「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"」とタグ内で指定してあるだけの違いです。

実際上の違いとしては、たとえば「hello」と入力して送信した場合、GETが
  http://localhost:8080/siroto/GetPost?message=hello
と入力パラメータつきで表示されるのに対して、POSTは
  http://localhost:8080/siroto/GetPost
何も付加されません。

これは、入力パラメータの送信にGETがURLを利用するのに対して、POSTはHTTPのボディ部を利用することによります。

このソースのように、doGet()とDoPost()のいずれでも利用できるようにして、共通処理を別メソッドにまとめるやり方はよく使うので理解してください。

ちなみに、doGet()メソッドとdoPost()メソッドがpublicであるのに対して、common()メソッドはprivateであるのは、前者は外部からデータを受け取る必要があるけれど、後者は内部処理のみのメソッドだからです。


※ソースの中の赤字で書いた部分は、テキストボックスにマウスカーソルを当てると初期値の文字が消えるJavaScriptの処理です。別にこの部分はなくてもかまいません。
スポンサーサイト



タグ : JavaScript

Return to page top

Comments:

2015-11-10 Tue 11:56:55

このコメントは管理者の承認待ちです

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://servletmania.blog137.fc2.com/tb.php/17-686d0abd
月別アーカイブ
カテゴリ
リンク
RSSリンクの表示
QRコード
QR