Webプログラミング入門⑤ JSPの画面からJavaへのデータの受け渡し

今回はJSPで画面に入力した値をJava側に受け渡すやり方について説明していきます。
少し難しいかもしれないので、最初に軽く処理の内容を図で書いておきます。

①初期表示時、上記のURLでリクエストを送信する
②web.xmlを見て、URL(/Input)からInput.javaを呼び出す
③Input.javaでは、Input.jspにフォワード(Input.jspをそのまま返す)
④Input.jspがクライアントPCのブラウザで解釈され、画面が表示される
⑤(画面でクライアントが名前欄に任意の値を入力して送信ボタンを押す)
⑥web.xmlを見て、URL(/Output)からOutput.javaを呼び出す
⑦Output.javaでは、画面で入力した値を取得してその値をOutput.jspで表示できるように再設定する
⑧Output.jspがクライアントPCのブラウザで解釈され、画面が表示される(⑦で設定した内容含む)
以上のような流れで今回のプログラムは作成していきます。

それでは、いつも通りプロジェクトを作成していきましょう。
今回のプロジェクト名は「JspToJavaProject」としましょう。

今回は前回のおさらいも含め、入力用の画面で入力した値を出力用の別画面に表示するようなプログラムを作成したいと思います。
そのため、クラス・JSPともに2ファイル作成します。
まずはJavaクラスから、「Input.java」、「Output.java」としましょう。
それぞれソースコードを以下のように変更してください。

Input.java

import java.io.IOException;

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

public class Input extends HttpServlet {

	/**
	 * デフォルトコンストラクタ
	 */
	public Input() {
	}

	/**
	 * Http通信のGet用メソッド
	 * 
	 * @param request Httpリクエスト
	 * @param response Httpレスポンス
	 * @throws ServletException サーブレット例外
	 * @throws IOException 入出力例外
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ServletContext sc = getServletContext();
		sc.getRequestDispatcher("/WEB-INF/Input.jsp").forward(request, response);
	}
}

Output.java

import java.io.IOException;

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

public class Output extends HttpServlet {

	/**
	 * デフォルトコンストラクタ
	 */
	public Output() {
	}

	/**
	 * Http通信のGet用メソッド
	 * 
	 * @param request Httpリクエスト
	 * @param response Httpレスポンス
	 * @throws ServletException サーブレット例外
	 * @throws IOException 入出力例外
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String name = (String) request.getParameter("name");
		request.setAttribute("name", name);

		ServletContext sc = getServletContext();
		sc.getRequestDispatcher("/WEB-INF/Output.jsp").forward(request, response);
	}
}

Inputクラスは前回同様、Input.jspを表示するような処理となっています。
Outputクラスでは、「String name = (String) request.getParameter(“name”);」で画面で入力した”name”というパラメータの値をnameという変数に取得します。
その後、「request.setAttribute(“name”, name);」で次の画面で値を取得できるように設定しなおすようなイメージです。
それでは、続いてjspです。

Input.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<DOCTYPE HTML>
<html lang="ja">
<head>
  <meta charset="UTF-8">
</head>
<body>
	<form action="http://localhost:8080/JspToJavaProject/Output" method="get">
		<p>入力用の画面です</p>
		<p>名前:<input type="text" id="name" name="name"></p>
		<input type="submit" value="送信">
	</form>
</body>
</html>

Output.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<DOCTYPE HTML>
<html lang="ja">
<head>
  <meta charset="UTF-8">
</head>
<body>
	<p>出力用の画面です</p>
	<p>入力された名前:${name}</p>
	<a href="http://localhost:8080/JspToJavaProject/Input">入力画面へ戻る</a>
</body>
</html>

Input.jspからOutput.javaに入力された値を引き渡す際、<form>タグ内に囲まれた<input>のタグの情報はデフォルトで送信されるため、そこだけ覚えておけば特にパラメータの送信を意識しなくても値を送信することができます。
Output.jspでは「Webプログラミング入門③」で学んだ内容${}のみとなっています。
最後にweb.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns="https://jakarta.ee/xml/ns/jakartaee" 
 xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" 
 xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" 
 id="WebApp_ID" version="5.0">
  <display-name>JspTransitionProject</display-name>
  <welcome-file-list>
  	<welcome-file>index.html</welcome-file>
  	<welcome-file>index.jsp</welcome-file>
  	<welcome-file>index.htm</welcome-file>
  	<welcome-file>default.html</welcome-file>
  	<welcome-file>default.jsp</welcome-file>
  	<welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  <servlet>
 	<servlet-name>input</servlet-name>
 	<servlet-class>Input</servlet-class>
 </servlet>
 <servlet-mapping>
 	<servlet-name>input</servlet-name>
 	<url-pattern>/Input</url-pattern>
 </servlet-mapping>
 <servlet>
 	<servlet-name>output</servlet-name>
 	<servlet-class>Output</servlet-class>
 </servlet>
 <servlet-mapping>
 	<servlet-name>output</servlet-name>
 	<url-pattern>/Output</url-pattern>
 </servlet-mapping>
</web-app>

一番上の図で表したように、/Input、/Outputをそれぞれマッピングしただけですね。
それでは、このまま実行してみましょう。

入力用の画面が表示されたので「名前:」の欄に適当に名前を入力して送信ボタンを押下してみましょう。

送信ボタンを押下します。

無事に入力した「t-akutsu」という文字が表示されました。
これでJSPで入力した値をJavaを通して別のJSPで表示することができましたね。
ここまでできればかなりいろいろなことができるようになるはずです!

今回はここまで。次回は今までの復習と応用を兼ねて簡単なゲームを作ってみましょう。
前回:Webプログラミング入門④ JSPの画面遷移
次回:お待ちください。

コメント

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