動的Webプロジェクト③Get/Post
前回から続く動的Webプロジェクトについての連載です。
①サーブレット
②JSP
③Get/Post(今回)
今回のテーマは、Get/Postについてです。
HTTPリクエストは以下の表のとおりです。
リクエスト | サーブレット側で受信するためのメソッド | 説明 |
GET | doGet() | リソースを取得する |
POST | doPost() | リソースに対してデータを送信する |
HEAD | doHead() | リソースのヘッダ情報だけを取得する |
PUT | doPut() | リソースに対してデータを送信して更新する |
DELETE | doDelete() | リソースを削除する |
これについて学んでいきましょう。
①Webプロジェクトの作成
メニューのファイル→新規→動的Webプロジェクトを選びます。プロジェクト名は、ServletGetPostにしましょう。
次へボタンを押します。
ここは、特に変更する必要はありません。次へボタンを押します。
web.xmlデプロイメント記述しの生成にチェックをして、完了ボタンを押下します。
②サーブレットの作成
ServletGetPost/src/main/java/で右クリックして、新規→その他→Webフォルダ→サーブレットを選択します。
Javaパッケージは、appにし、クラス名は、ServletGetPostにします。
次へボタンを押下します。
ここは、特に変更する必要はありません。次へボタンを押下します。
ここも、特に変更する必要はありません。完了ボタンを押下します。
サーブレット側の実装です。doGetメソッドから解説させてください。
行数 | 説明 |
31 | 自動的にひな形として追加されましたが、不要なのでコメントにしています。 |
32 | 引数のrequetからname属性が"message"の値を取得しています。 |
33 | これは、文字コードをUFT-8に設定しています。 これを指定しないと文字化けしてしまいます。 |
34 | Webページに出力用のオブジェクトを作成しています。 |
36 | Webページに出力用のオブジェクトに、リクエストのname属性が"message"の値を設定しています。 |
行数 | 説明 |
45 | 自動的にひな形として追加されましたが、不要なのでコメントにしています。 |
46 | 引数のrequetからname属性が"message"の値を取得しています。 |
47 | これは、文字コードをUFT-8に設定しています。 これを指定しないと文字化けしてしまいます。 |
48 | Webページに出力用のオブジェクトを作成しています。 |
50 | Webページに出力用のオブジェクトに、リクエストのname属性が"message"の値を設定しています。 |
③JSPの作成
まず、jspを格納するためのフォルダを作成します。ServletGetPost/src/main/webappで右クリックしてフォルダを作成します。
jspフォルダを右クリックして、新規→JSPファイルを選択します。
ファイル名は、FormGetPost.jspとします。
次へボタンを押します。
ここは、特に変更する必要はありません。
完了ボタンを押下します。
JSPのひな形が作成されます。
GETメソッドとPOSTメソッドを実装します。行数 | 説明 |
11、17 | formタグの解説をさせてください。 actionで、リクエストの送信先のサーブレットのパスの指定をしています。 method属性でリクエストの種類であるget/postの指定をしています。 |
12、18 | inputタグの解説をさせてください。 type属性で(text)テキストボックスを指定しています。 |
13、20 | type属性で(submit)送信ボタンを指定します。 value属性でボタンの表示にする文字を指定しています。 |
④Webプロジェクトのサーバー構成に追加
Tomcat10_Java21を右クリック→追加及び除去を選択します。WebプロジェクトのServletGetPostを選択して、追加ボタンで構成済にします。
完了ボタンを押下します。
サーバーに紐付けられれば成功です。
これで準備完了です。Tomcatサーバーを起動してみましょう。
サーバー起動後に、urlをhttp://localhost:8080/ServletGetPost/jsp/FormGetPost.jspに設定すると、Webページが表示します。
さっそく、GETリクエストのテストしてみましょう。
以下のように、リクエストの通りに表示されれば成功です。
POSTリクエストもテストしてみましょう。
以下のように、リクエストの通りに表示されれば成功です。今回はなかなか大変でしたね。
お疲れ様でした。
■ソースコードのコピーペースト用に記載します。
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);
}
}
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>
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>