感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

サーブレットでブラウザで入力されたパラメータ(値)を受け取って表示させる。

スポンサーリンク

サーブレットでリクエストに含まれたパラメータを受け取るサンプル

まずはコードから。

package servlet;

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

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

public class ParameterTestServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
                    throws ServletException, IOException {
        System.out.println("This is doGetMethod");
        perform(req, res);
    }
    
    public void doPost(HttpServletRequest req, HttpServletResponse res) 
                    throws ServletException, IOException {
        System.out.println("This is doPostMethod");
        perform(req, res);
    }

    private void perform(HttpServletRequest req, HttpServletResponse res) 
                throws ServletException, IOException {
        String message = req.getParameter("message");
        PrintWriter out = res.getWriter();
        out.println("Message=" + message);
    }
}

ここにあるperformというメソッドはGETでリクエストが飛んできても、POSTでリクエストが飛んできても処理できるようにするためのメソッドである。

で、ポイントは

String message = req.getParameter("message");

の部分。
ここで、ブラウザからリクエストを飛ばされた時の引数(パラメータ)、要はブラウザでテキストボックスなんかに入力された値を取得することができる。

では、ブラウザ側のHTMLはどうなっているかというと、、、

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title> Parameter Test </title>
</head>
<body>
<h2> パラメータをサーブレットで受け取るテスト</h2>
<form action="http://localhost:8082/rest/param">
	<p>テキスト
		<input type="text" name="message">
		<input type="submit">
	</p>
</form>
</body>
</html>

こんな感じで、formの属性にサーブレットURIを指定した。

このリクエストを飛ばしたらどうなるかというと、、、
ブラウザに

Message=test

のように表示される。
テキストボックスに入れた値が表示されるようになる。

ちなみに、このサーブレットのweb.xmlはこんな感じ。あと、デフォルトの待ち受けポート8080はOracleと競合するから変更している。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    
    <servlet>
        <servlet-name>front</servlet-name>
        <servlet-class>controller.ControllerServlet</servlet-class>
    </servlet>
    
   <servlet>
        <servlet-name>param</servlet-name>
        <servlet-class>servlet.ParameterTestServlet</servlet-class>
    </servlet>
    
    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>front</servlet-name>
        <url-pattern>/front</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>param</servlet-name>
        <url-pattern>/param</url-pattern>
    </servlet-mapping>
</web-app>

このようにurl-patternのところに/paramと指定しているから、
http://localhost:8082/rest/param
でリクエストが届く(コンテキストルートはrest)

参考文献

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)