こんにちは。「Javaを復習する初心者」です。
今回はサーブレットからJSPに値を送る方法を確認しました。
今回はリクエストパラメータは使わずに、サーブレット内であるクラスのインスタンスを生成し、その値をJSPへ送るというのが目的です。
サーブレット側
サーブレット側で実行する全体的な処理は以下です。
- Personクラスのインスタンスを生成。
- 生成したインスタンスをリクエスト属性に登録。
- JSPへフォワードする。
「リクエスト属性」とはひとつのリクエストで保持される変数らしいです。詳しくは分かりませんでしたが、「リクエスト属性に登録」というのはHttpServletRequestクラスのsetAttributeメソッドを使います。なのでリクエストパラメータの設定のようなものだと解釈しました。「フォワード」はRequestDispatcherクラスのforwardメソッドを使います。ここは一定の書き方があるようです。
上記のPersonクラスはデータの保持を目的とする自作クラスです。以下のように定義しました。
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側の記述です。
helloServletToJSP.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タグを使っていないため、改行されずに表示されます。