【Java・サーブレット】doGetとdoPostの違いと呼び出し方

Java

今回の記事ではサーブレットのdoGetとdoPostの違いや呼び出し方について解説していきます。
「サーブレットを勉強しているけど、doGetとdoPostの違いがわからない」
「GETとPOSTの違いって何?」
「doGetとdoPostの呼び出し方を知りたい」
という方におすすめの記事となっていますので、ぜひ最後まで読んでいってください。

このブログでは初心者の方向けにサーブレットとjspでwebアプリを開発する方法をサンプルコード付きで解説しています。ぜひチャレンジしてみてください。

GETとPOSTとは

まず最初にGETとPOSTについて簡単に説明します。
webサイトやwebアプリの基本的な構造はブラウザとサーバーの間でやり取りが行われています。

具体的にはchromeやedgeあるいはSafariといったwebブラウザからサーバーに対してリクエストを送ります。
サーバーはそのリクエストに対して、処理を行いレスポンスを返します。

ブラウザとサーバーの関係は家族とお母さんの関係に似ています。
家族はお母さんに対して「今日の晩御飯なに?」とリクエストを送ります。
お母さんはリクエストに対して、「今日の晩御飯はハンバーグだよ」とレスポンスします。
お母さんは息子、娘、お父さんといった様々な家族からの質問に対して、回答を行います。

ブラウザがサーバーにリクエストを行う際にはいくつかの方法があり、その中の代表的な方法がGETとPOSTです。
これは家族が「今日の晩御飯なに?」と日本語で聞いてきたり、英語で聞いてきたりする違いがあるというような感じだと思えば良いと思います。

サーバーはGETでリクエストが送られてきた時とPOSTでリクエストを送られてきた時に処理を変えたりします。

GETとPOSTの違い

ではGETとPOSTの違いはなんでしょうか?
1番の違いはパラメータの渡し方の違いです。
GETでリクエストした場合はurlの末尾にパラメータが追加されます。
例えば、Googleで検索すると「google.com」の後に「search?q=……」のようにパラメータが追加されていることがわかります。

逆にPOSTの場合はurlにパラメータが追加されることはありません。
例えばwebサービスに会員登録やログインをする際にボタンを押します。
この時にurlに会員IDやパスワードが追加されることはありません。

以上がGETとPOSTの違いです。

doGetとdoPostの呼び出し方や使い分けをコードで確認

GETとPOSTの違いについて理解したところで、サーブレットのdoGetやdoPostの呼び出し方や使い分けをコードを使いながら具体的に解説していきます。

jsp

次のようなjspを用意します。
jspにはaタグのリンク、フォームが2つあります。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GETとPOSTの確認</title>
</head>
<body>

<a href="/BlogApplication/GetPost">リンクで呼び出すとGETでリクエストが送られる</a>

<form method="GET" action="GetPost">
	<input type="submit" value="GETで送信">
</form>

<form method="POST" action="GetPost">
	<input type="submit" value="POSTで送信">
</form>

</body>
</html>

aタグによるリンクでリクエストが送られる場合は、基本的にGETでサーバーの処理が呼び出されます。
フォームをボタンで送信する場合にはGETとPOSTを選択することが可能で、formタグのmethodに呼び出したい方法を指定します。

サーブレット

では呼び出すサーブレットについてです。
サーブレットにはdoGetメソッドとdoPostメソッドを用意しています。

GETでリクエストが来た場合にはdoGetメソッドが呼ばれ、POSTでリクエストが来た場合にはdoPostメソッドが呼び出されます。

今回はそれぞれ別のjspを呼び出すように処理を記述しています。

package uhablog;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/GetPost")
public class GetPost extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * GETメソッドで呼ばれた時の処理
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/get-result.jsp").forward(request, response);
	}

	/**
	 * POSTメソッドで呼ばれた時の処理
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/post-result.jsp").forward(request, response);
	}

}

結果を表示するjsp

最後に結果を表示するjspを2つです。
「GETで呼ばれた」「POSTで呼ばれた」というものをアピールするjspとなっています。

GETで呼ばれた時のjsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GETで呼ばれた</title>
</head>
<body>

<h1>GETで呼ばれた</h1>

</body>
</html>

POSTで呼ばれた時のjsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>POSTで呼ばれた</title>
</head>
<body>

<h1>POSTで呼ばれた</h1>

</body>
</html>

以上を準備してサーバーを起動します。

リンクを押した時と「GETで送信」を押したときは次のようにGETアピールがされます。

「POSTで送信」を押したときは次のようにPOSTアピールがされます。

以上でdoGetとdoPostの違いと呼び出し方についての解説は終了です。

プログラミング初心者からWebアプリを開発できるようになってエンジニアに就職・転職するまでの学習手順をまとめた記事もあります!
こちらもぜひご覧ください!!

コメント

タイトルとURLをコピーしました