動的Webプロジェクト③Get/Post

前回から続く動的Webプロジェクトについての連載です。
①サーブレット
②JSP
③Get/Post(今回)

今回のテーマは、Get/Postについてです。

Get/Postとは? Webアプリは、HTTPプロトコルを使用しています。
HTTPプロトコルには、リクエストメソッドというものがあります。

HTTPリクエストは以下の表のとおりです。

リクエストサーブレット側で受信するためのメソッド説明
GETdoGet()リソースを取得する
POSTdoPost()リソースに対してデータを送信する
HEADdoHead()リソースのヘッダ情報だけを取得する
PUTdoPut()リソースに対してデータを送信して更新する
DELETEdoDelete()リソースを削除する
Webアプリでよく使用されるリクエストは、Get/Postなので、
これについて学んでいきましょう。
実装手順 ①Webプロジェクトの作成
②サーブレット側で、doGet()、doPostを作成
③JSP側で、フォームアクションをGETメソッド/POSTメソッドを作成
④Webプロジェクトのサーバー構成に追加

①Webプロジェクトの作成

メニューのファイル→新規→動的Webプロジェクトを選びます。
プロジェクト名は、ServletGetPostにしましょう。
次へボタンを押します。

ここは、特に変更する必要はありません。次へボタンを押します。

web.xmlデプロイメント記述しの生成にチェックをして、完了ボタンを押下します。

②サーブレットの作成

ServletGetPost/src/main/java/で右クリックして、
新規→その他→Webフォルダ→サーブレットを選択します。
Javaパッケージは、appにし、クラス名は、ServletGetPostにします。
次へボタンを押下します。

ここは、特に変更する必要はありません。次へボタンを押下します。

ここも、特に変更する必要はありません。完了ボタンを押下します。

サーブレット側の実装です。
doGetメソッドから解説させてください。
行数説明
31自動的にひな形として追加されましたが、不要なのでコメントにしています。
32引数のrequetからname属性が"message"の値を取得しています。
33これは、文字コードをUFT-8に設定しています。
これを指定しないと文字化けしてしまいます。
34Webページに出力用のオブジェクトを作成しています。
36Webページに出力用のオブジェクトに、リクエストのname属性が"message"の値を設定しています。
doPostメソッドの解説もさせてください。(基本的な処理はdoGetと同じです。)
行数説明
45自動的にひな形として追加されましたが、不要なのでコメントにしています。
46引数のrequetからname属性が"message"の値を取得しています。
47これは、文字コードをUFT-8に設定しています。
これを指定しないと文字化けしてしまいます。
48Webページに出力用のオブジェクトを作成しています。
50Webページに出力用のオブジェクトに、リクエストのname属性が"message"の値を設定しています。

③JSPの作成

まず、jspを格納するためのフォルダを作成します。
ServletGetPost/src/main/webappで右クリックしてフォルダを作成します。
jspフォルダを右クリックして、新規→JSPファイルを選択します。
ファイル名は、FormGetPost.jspとします。
次へボタンを押します。
ここは、特に変更する必要はありません。
完了ボタンを押下します。

JSPのひな形が作成されます。

GETメソッドとPOSTメソッドを実装します。
行数説明
11、17formタグの解説をさせてください。
actionで、リクエストの送信先のサーブレットのパスの指定をしています。
method属性でリクエストの種類であるget/postの指定をしています。
12、18inputタグの解説をさせてください。
type属性で(text)テキストボックスを指定しています。
13、20type属性で(submit)送信ボタンを指定します。
value属性でボタンの表示にする文字を指定しています。

④Webプロジェクトのサーバー構成に追加

Tomcat10_Java21を右クリック→追加及び除去を選択します。
WebプロジェクトのServletGetPostを選択して、追加ボタンで構成済にします。
完了ボタンを押下します。

サーバーに紐付けられれば成功です。

これで準備完了です。Tomcatサーバーを起動してみましょう。

サーバー起動後に、urlをhttp://localhost:8080/ServletGetPost/jsp/FormGetPost.jspに設定すると、
Webページが表示します。

さっそく、GETリクエストのテストしてみましょう。

以下のように、リクエストの通りに表示されれば成功です。

POSTリクエストもテストしてみましょう。

以下のように、リクエストの通りに表示されれば成功です。
今回はなかなか大変でしたね。
お疲れ様でした。
☆まとめ☆ 今回は、HTTPプロトコルのリクエストであるGET/POSTについて学びました。
JSPから、サーブレットにリクエストを送る処理はよくあるので、修得したいスキルだと思います。
少しづつでも、Webアプリの開発に慣れていければと思います。

■ソースコードのコピーペースト用に記載します。

ServletGetPost.java

package app;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
* Servlet implementation class ServletGetPost
*/
public class ServletGetPost extends HttpServlet {
  private static final long serialVersionUID = 1L;

  /**
  * @see HttpServlet#HttpServlet()
  */
  public ServletGetPost() {
    super();
    // TODO Auto-generated constructor stub
  }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // TODO Auto-generated method stub
    //response.getWriter().append("Served at: ").append(request.getContextPath());
    String str = request.getParameter("message");
    response.setContentType("text/plain; charset=UTF-8");
    PrintWriter out =response.getWriter();
    //doGetメソッドで受信
    out.println("doGetメソッドで受信 message="+str);
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // TODO Auto-generated method stub
    //doGet(request, response);
    String str = request.getParameter("message");
    response.setContentType("text/plain; charset=UTF-8");
    PrintWriter out =response.getWriter();
    //doPostメソッドで受信
    out.println("doPostメソッドで受信 message="+str);
  }

}

FormGetPost.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%--JSPコメント GETメソッドで送信 --%>
<form action="../ServletGetPost" method="get">
<input type="text" name="message">
<input type="submit" value="フォームでget送信">
</form>

<%--JSPコメント POSTメソッドで送信 --%>
<form action="../ServletGetPost" method="post">
<input type="text" name="message">
<input type="submit" value="フォームでpost送信">
</form>
</body>
</html>

Follow me!