Servlet/JSP基礎編04 サーブレットのリクエスト処理1

作成するプログラム

前回のプログラムでは、サーブレットに慣れてもらうためにレスポンス処理のみのものを紹介した。

今回の記事では、実際のWebサイトのようにリクエストを拾い、それに対応するレスポンスをするプログラムを作成しようと思っている。

まずは、僕らが入力するHTML文書の作成をし、それに対応するサーブレットを作成する。

HTMLの作成

HTMLには、わかりやすくリクエストを送れるもののほうが良いと思うので、シンプルにテキストボックスとsubmitボタンを配置する。

下のプログラムが今回のHTML文書である。

<!DOCTYPE HTML>
<html>
    <head>
    <meta charset="UTF-8">
    <title>Servlet/JSP Samples</title>
    </head>
    <body>

        <p>お名前を入力してください</p>
        <form action="greeting" method="post">
        <input type="text" name="user">
        <input type="submit" value="確定">
        </form>
    </body>
</html>

 HTMLを知っている人なら、そんなに難しくないプログラムである。

「お名前を入力してください」という文章をのせ、その下にテキストボックスと確定ボタンを設置する。

formタグのaction属性には、送信先を指定するので、サーブレットのURLを指定する。そして、HTTPリクエストには、「GET」、「POST」の二つがあるが、今回は「POST」とする。

・GETリクエストとPOSTリクエス

GETリクエストを指定すると、送信するとき、リクエストパラメータ、今回の例でいうと、テキストボックスの内容がアドレスバーのURLに付属されてしまう。

POSTリクエストはアドレスバーに付属されない。

今回の場合は、特に他人にテキストボックスの中身が見られても問題はないが、パスワードの入力などには、POSTリクエストをするのが、無難である。

サーブレットの作成

サーブレットでは、先ほど作成したHTML文書のリクエストの中身を取り出して、

「こんにちは、〇〇さん」と表示するプログラムを作成する。

まず、リクエストを取り出す前に、レスポンスとの文字エンコーディングを一致させないと、文字化けが発生するので、「response.setContentType」と「request.setCharacterEncoding」を記述し、「UTF-8」で一致させる。

次に、リクエストを取り出す処理である。この処理ができるメソッドはいくつかあるが、最も基本的な「getParameterメソッド」を使用する。しかし、一つ注意点があり、入力値が数値であってもString型として戻り値がくるということである。そのため、今回のような名前を表示するプログラムでは問題ないが、数値として扱いたいときは、String型からInt型などにキャストをする必要がある。

では、実際に書いたプログラムを載せたいと思う。

@WebServlet(urlPatterns={"/chapter5/greeting"})
public class Greeting extends HttpServlet{

    public void doPost(HttpServletRequest request,HttpServletResponse response

 

 



    throws ServletExceptionIOException{

        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();

        request.setCharacterEncoding("UTF-8");
        String user = request.getParameter("user");

        Page.header(out);
        out.println("<p>こんにちは、"+ user +"さん</p>");
        Page.footer(out);
    }
}

 Webアノテーションでは、「greeting」と指定しており、先ほどのHTMLのformタグのaction属性でも「greeting」と指定しているので、個のサーブレットに処理が任されることになる。

リクエストをString型の変数userに入れている。そして、「getParameter」の引数には、HTML文書の方のname属性の名前を入力すると、その属性の変数が手に入る。

変数に格納できれば、通常のJavaプログラムの変数と同じ扱いをしてもよい。

実行した結果は以下のようになった。

f:id:kouki-matsuura:20200825021502p:plainf:id:kouki-matsuura:20200825021505p:plain

まずは、入力欄に、自分の名前を入れ、確定のボタンを押す。

 

こんにちは、koukiさん

 

問題なく表示されている。

おわりに

最もシンプルなリクエストとレスポンスを扱った。これで、リクエストがどのようなものか少しはわかっていただけたかと思う。

次回の記事では、もう少し、本格的なHTMLを作成し、リクエストとレスポンスの理解を深めたいと思う。