転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【技術書メモ】基礎からのサーブレット⑯

スコープとリクエスト属性

スコープ・・・変数名や関数名などを利用できる範囲のこと。
属性・・・サーブレット/JSPのデータ(オブジェクト)を保存するための仕組み。

属性には、以下種類がある。
ページ属性・・・JSPのみで使用可。現在のページ内でだけ有効なデータを保存できる。
リクエスト属性・・・同じリクエスト内で、データを受け渡せる。
セッション属性・・・Webアプリケーションを利用するユーザごとに、別々のデータを保存できる。複数リクエストに跨って、データを保持できる。
アプリケーション属性・・・Webアプリケーション全体で共有するデータを保存できる。

@WebServlet(urlPatterns={"/chapter16/attribute"})
public class Attribute extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		Product p = new Product();
		p.setId(1);
		p.setName("まぐろ");
		p.setPrice(100);

		// 属性名をproductで、Beanをリクエスト属性に設定
		req.setAttribute("product", p);

		// JSPファイルにフォワード
		req.getRequestDispatcher("attribute.jsp").forward(req, resp);

	}
}
<body>

<%-- bean.Productクラスをインポート --%>
<%@page import = "bean.Product" %>

<%-- 属性の取得 --%>
<% Product p = (Product)request.getAttribute("product"); %>
<%= p.getId() %>:<%= p.getName() %>:<%= p.getPrice() %><br>

</body>
@WebServlet(urlPatterns={"/chapter16/attribute2"})
public class Attribute2 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		try {

			// DBから取得
			ProductDAO dao = new ProductDAO();
			List<Product> list = dao.search("");

			// リクエスト属性に設定
			req.setAttribute("list", list);

			// JSPファイルにフォワード
			req.getRequestDispatcher("attribute2.jsp").forward(req, resp);

		} catch (Exception e) {

			e.printStackTrace(pw);

		}

	}

}
<body>

<%-- bean.Productクラス、Listクラスをインポート --%>
<%@page import = "bean.Product, java.util.List" %>

<%-- 属性の取得 --%>
<% List<Product> list = (List<Product>)request.getAttribute("list"); %>

<% for (Product p : list) { %>
	<%= p.getId() %>:<%= p.getName() %>:<%= p.getPrice() %><br>
<% } %>

</body>