こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

サーブレットからJSPにBeanを送る

こんにちは。「Javaを復習する初心者」です。今回はサーブレットからJSPに値を送る方法を確認しました。

今回はリクエストパラメータは使わずに、サーブレット内であるクラスのインスタンスを生成し、その値をJSPへ送るというのが目的です。

サーブレット側

サーブレット側で実行する全体的な処理は以下です。

  1. Personクラスのインスタンスを生成。
  2. 生成したインスタンスをリクエスト属性に登録。
  3. JSPへフォワードする。

「リクエスト属性」とはひとつのリクエストで保持される変数らしいです。詳しくは分かりませんでしたが、「リクエスト属性に登録」というのはHttpServletRequestクラスのsetAttributeメソッドを使います。なのでリクエストパラメータの設定のようなものだと解釈しました。「フォワード」はRequestDispatcherクラスのforwardメソッドを使います。ここは一定の書き方があるようです。

上記のPersonクラスはデータの保持を目的とする自作クラスです。以下のように定義しました。

package dto;

public class Person {

    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

}

パッケージdtoに定義したので、このクラスをimportする場合の完全限定名はdto.Personです。これはJSP側で必要になります。

以下はサーブレット側の記述です。

package test;

import java.io.IOException;

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

import dto.Person;

@WebServlet("/HelloServletToJSP")
public class HelloServletToJSP extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Person person = new Person("太郎", 18);

        request.setAttribute("person", person);

        getServletContext().
            getRequestDispatcher("/helloServletToJSP.jsp")
            .forward(request, response);

    }

}

最初にPersonクラスのインスタンスを生成しています。これをJSPへ送ることが目的です。そのためにsetAttributeメソッドで属性personにインスタンスを設定しています。getRequestDispatcherメソッドの引数でフォワード先のjspが設定できるようです。最後にforwardメソッドを使い、フォワードをしています。

JSP側

以下がjsp側の記述です。

<%@ page contentType="text/html;charset=UTF-8" %>
<jsp:useBean id="person" class="dto.Person" scope="request" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>test</title>
</head>
<body>

<%=person.getName() %>
<%=person.getAge() %>

</body>
</html>

<jsp:useBean>はアクションタグと呼ばれるタグのひとつです。id属性でオブジェクトの名前を設定できますが、この名前がそのままリクエスト属性の名前になります。class属性はクラスの完全限定名を設定します。今回はサーブレット側でdto.Personのインスタンスをリクエスト属性に設定したので、class属性にはdto.Personを設定します。

<%=person.getName() %>で値を出力できます。これはExpressionというjspでの記法です。

実効結果

以下がサーブレットの実行結果です。

太郎 18 

brタグを使っていないため、改行されずに表示されます。