JSP スコープ/リクエストスコープ

##スコープ
- [x]スコープとは
インスタンスを保存できる領域

- [x]スコープに保存できるのはインスタンス「だけ」
- [x]スコープにはString、Integerなど通常クラスの
インスタンスを保存できるが、基本的には「JavaBeans」と呼ばれる
クラスのインスタンスを保存する

<FONT color="#ff0000">■リクエストスコープに保存</font>
**request.setAttribute("属性名",インスタンス)**



<FONT color="#ff0000">■リクエストスコープからインスタンスを取得</font>
**取得するインスタンスの型　名前　＝**
&nbsp　**(取得するインスタンスの型)　request.getAttribute("属性名")**

<FONT color="#ff0000">■setAttributeメソッド</font>
**リクエストに新しい属性名と値を**
**セットすることが出来る**

<FONT color="#ff0000">■getAttributeメソッド</font>
**追加した属性を取り出す**
**指定された名前の属性値を Object として返す**
[getAttribute()API](https://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/ServletRequest.html#getAttribute(java.lang.String))

<FONT color="#ff0000">■ServletRequest</font>
[ServletRequestインターフェースAPI](https://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/ServletRequest.html#getAttribute(java.lang.String))

#JavaBeans リクエストスコープ例
▪️Test15Servlet.java

```java
package javabeans;

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;

@WebServlet("/Test15Servlet")
public class Test15Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Test15Beans t15b = new Test15Beans("湊", 24);
		request.setAttribute("t15b", t15b);
		Test15Beans t = (Test15Beans) request.getAttribute("t15b");

	}

}
```

▪️Test15Beans.java

```java
package javabeans;
import java.io.Serializable;

public class Test15Beans implements Serializable{
	private static final long serialVersionUID = 1L;
	private String name;
	private int age;
	
	public Test15Beans() {
		
	}
	
	public Test15Beans(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	

}
```

▪️Test15Servlet.java 実行結果
![スクリーンショット 2016-02-22 16.28.45.png](https://qiita-image-store.s3.amazonaws.com/0/95187/83d32c09-da83-33e9-de75-7a8f08d9a474.png)

#JSPファイルでリクエストスコープを使用する例
▪️Human2Servlet.java

```java
//Controller
//ブラウザからの応答・要求を受け付けるサーブレット
package servlet;

import java.io.IOException;

import javax.servlet.*;
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 model.Human2;

@WebServlet("/HumanServlet")
public class Human2Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Human2 human = new Human2("湊", 23);
		// setAttributeメソッド
		// →リクエストに新しい属性名と値をセットすることができる
		request.setAttribute("human", human); // ここでリクエストスコープに保存

		// フォワード
		RequestDispatcher dispatcher = request.getRequestDispatcher("/Test13Jsp.jsp");
		dispatcher.forward(request, response); // フォワードを行う
	}
}
```

▪️Human2.java

```java
//Model
package model;

import java.io.Serializable;

public class Human2 implements Serializable {
	private static final long serialVersionUID = 1L;
	private String name;
	private int age;

	public Human2() {

	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}
```

▪️Test13Jsp.jsp

```jsp
<!-- View -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="model.Human2"%>
<%
	//ここでリクエストスコープを受け取る
	//getAttributeメソッド
	//→追加した属性を取り出す
	Human2 human = (Human2) request.getAttribute("human");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPでリクエストスコープ</title>
</head>
<body>
	<p>
		<%=human.getName()%>さんは<%=human.getAge()%>歳です
	</p>
</body>
</html>
```

▪️Human2Servlet.java
![スクリーンショット 2016-02-22 16.42.12.png](https://qiita-image-store.s3.amazonaws.com/0/95187/17ae0be2-f007-e184-4e26-14d0740d49e6.png)

▪️ファイル構成
![スクリーンショット 2016-02-22 16.48.38.png](https://qiita-image-store.s3.amazonaws.com/0/95187/5133c3f5-6848-0d12-56c4-657f0bc519a7.png)