Java

【Java】doGetとdoPostの違いや使い分け方

 

1.doGetとdoPostの概要

WebサイトやWebアプリケーションをブラウザに表示するにあたって、クライアントとWebサーバ間で次のやり取りが行われています。

上図で、クライアントがサーバに対して「HTTPリクエスト」を行っていますが、今回解説するdoGetメソッドとdoPostメソッドは、どちらも「HTTPリクエスト」のリクエスト方法のです。

doGetメソッドとdoPostメソッドは、共にHTTPリクエスト時のパラメータの受け渡しを行います。

どちらを使用しても表面上は同じ動きをしますが、渡す仕組みが全く異なります。

簡単に言うと、以下の違いとなります。

  • doGetメソッドは、パラメータ情報をURLにのせてサーブレットを投げる
  • doPostメソッドは、パラメータ情報をformタグに含めサーブレットへ投げる

以下ではそれぞれの特徴を記載していきます。

2.doGetメソッドの特徴

doGetメソッドは指定したURIリソースの取り出しを行うメソッド、つまりリクエスト時に渡したパラメータ情報を取得するためのメソッドであり、GETリクエストされた場合に実行されます。

ココがポイント

GETは受け渡したいパラメータをURLクエリとして追加することにより、データを渡します。

 

サンプルコード

 

次に、サンプルコードを用いて具体的に説明していきます。

Sample.java(パラメータを受け渡しを行うjavaファイル)

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
* Servlet implementation class mainController
*/
@WebServlet("/Sample")
public class Sample extends HttpServlet {

private static final long serialVersionUID = 1L;

//HTTP GETメソッド
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//➂入力値をリクエストスコープから取得して変数に格納
String name = request.getParameter("name");
String dob = request.getParameter("dob");
String sex = request.getParameter("sex");

//➃リクエストスコープに変数から取出した値を格納
request.setAttribute("name", name);
request.setAttribute("dob", dob);
request.setAttribute("sex", sex);

//➄リクエストスコープに格納した値をwebに表示するための処理
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/SampleGet.jsp");
dispatcher.forward(request, response);

}

//HTTP POSTメソッド
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("name");
String dob = request.getParameter("dob");
String sex = request.getParameter("sex");

request.setAttribute("name", name);

request.setAttribute("dob", dob);

request.setAttribute("sex", sex);

RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/SamplePost.jsp");
dispatcher.forward(request, response);

}

}

 

SampleGet.jsp(Webブラウザに表示するjspファイル)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTTP GETサンプルコード</title>
</head>
<body>

<h1>HTTP GETサンプルコード</h1>
<!-- ➁GETメソッドで画面に入力した値をSample.javaに引渡す -->
<form action="/GetPost/Sample" method="get">

<!-- ➀text型で入力項目を作成 -->
氏名:<input type="text" name="name"/><br />
生年月日:<input type="text" name="dob"/><br />
性別:<input type="text" name="sex"/><br />
<input type="submit" value="送信" /><br /><br>

<!-- ➅Sample.javaから渡されたパラメータを表示する-->
結果<br>
氏名:<%= request.getAttribute("name") %><br>
生年月日:<%= request.getAttribute("dob") %><br>
性別:<%= request.getAttribute("sex") %>

</form>

</body>
</html>

 

上記のコードは次の処理を行っています。

  • SampleGet.jspファイルに記載したコードで、でブラウザ上にテキストボックスを表示する※➀
  • ブラウザ上からテキストボックスに値が入力され送信ボタンが押されると、サーバ側にパラメータ渡す※➁
  • Sample.javaファイルのdoGetメソッドで、リクエストスコープに格納された値を取出す※➂
  • 先ほど取出した値を、画面表示用の変数に格納する※➃
  • SampleGet.jspファイルに記載したコードで、でブラウザ上に入力データを表示する※➅

※javaクラスの中にdoGetメソッドとdoPostメソッドが定義されていますが、ここでは、➁でmethod="get"で定義されているため、doGetメソッドが呼び出されます。

 

実行結果

 

 

3.doPostの特徴

doPostメソッドは、クライアントがWebブラウザ上で入力した内容をサーバ側に送信するために使用するメソッドです。

<form></form>内で入力された値をDBへ登録する場合など、何か入力データを登録する際に使用されます。

ココがポイント

POSTリクエストでは、リクエストパラメータをBody部に格納することにより、データを渡します。

 

サンプルコード

 

Sample.java(パラメータを受け渡しを行うjavaファイル)

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
* Servlet implementation class mainController
*/
@WebServlet("/Sample")
public class Sample extends HttpServlet {

private static final long serialVersionUID = 1L;

//HTTP GETメソッド
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//➀入力値をリクエストスコープから取得して変数に格納
String name = request.getParameter("name");
String dob = request.getParameter("dob");
String sex = request.getParameter("sex");

//➁リクエストスコープに変数から取出した値を格納
request.setAttribute("name", name);
request.setAttribute("dob", dob);
request.setAttribute("sex", sex);

//➂リクエストスコープに格納した値をwebに表示するための処理
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/SamplePost.jsp");
dispatcher.forward(request, response);

}

//HTTP POSTメソッド
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String name = request.getParameter("name");
String dob = request.getParameter("dob");
String sex = request.getParameter("sex");

request.setAttribute("name", name);
request.setAttribute("dob", dob);
request.setAttribute("sex", sex);

RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/SamplePost.jsp");
dispatcher.forward(request, response);

}

}

 

SamplePost.jsp(Webブラウザに表示するjspファイル)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTTP GETサンプルコード</title>
</head>
<body>

<h1>HTTP GETサンプルコード</h1>

<!-- ➆POSTメソッドで画面に入力した値をSample.javaに引渡す -->
<form action="/GetPost/Sample" method="post">

氏名:<input type="text" name="name"/><br />
生年月日:<input type="text" name="dob"/><br />
性別:<input type="text" name="sex"/><br />
<input type="submit" value="送信" /><br /><br>

結果<br>
氏名:<%= request.getAttribute("name") %><br>
生年月日:<%= request.getAttribute("dob") %><br>
性別:<%= request.getAttribute("sex") %>

</form>

</body>
</html>

 

javaクラスの中にdoGetメソッドとdoPostメソッドが定義されていますが、ここでは、➆でmethod="get"で定義されているため、doPostメソッドが呼び出されます。

ただし、表面上の動作はGetメソッドと変わりありません。

実行結果

 

 

以上でこの記事は終了となります。ありがとうございました(^^♪

-Java

Copyright© タカログ , 2022 All Rights Reserved Powered by AFFINGER5.