スコープとリクエスト属性
スコープ・・・変数名や関数名などを利用できる範囲のこと。
属性・・・サーブレット/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>