JSPにおけるBeanの役割ドメインScopeについて
1716 ワード
JSPでBeanを作成する場合、役割ドメインを指定する必要があります
scopeの値範囲は4つあり、役割ドメインのサイズから見ると、大きいから小さいの順に次のようになります.
application:
session:
request:
page:
多くの初心者が理解しにくいのはrequestとpageの違いです
実際、requestはrequestを通過する.setAttribute/getAttributeアクセス
一方pageは純粋なローカル変数と見なすことができ,現在のjspファイルが出ると存在せず,<%@include%>のページにも有効である.
forward後、requestの変数は有効ですが、pageは無効です.
次のセクションは、JSPでBeanを作成したときに最終的に実行されるソースコードです.
scopeの値範囲は4つあり、役割ドメインのサイズから見ると、大きいから小さいの順に次のようになります.
application:
session:
request:
page:
多くの初心者が理解しにくいのはrequestとpageの違いです
実際、requestはrequestを通過する.setAttribute/getAttributeアクセス
一方pageは純粋なローカル変数と見なすことができ,現在のjspファイルが出ると存在せず,<%@include%>のページにも有効である.
forward後、requestの変数は有効ですが、pageは無効です.
次のセクションは、JSPでBeanを作成したときに最終的に実行されるソースコードです.
private void doSetAttribute(String name, Object o, int scope) {
if (o != null) {
switch (scope) {
case PAGE_SCOPE:
attributes.put(name, o); // HashMap<String, Object> attributes
break;
case REQUEST_SCOPE:
request.setAttribute(name, o); //ServletRequest request
break;
case SESSION_SCOPE:
if (session == null) {
throw new IllegalStateException(Localizer
.getMessage("jsp.error.page.noSession"));
}
session.setAttribute(name, o); //HttpSession session
break;
case APPLICATION_SCOPE:
context.setAttribute(name, o); //ServletContext context
break;
default:
throw new IllegalArgumentException("Invalid scope");
}
} else {
removeAttribute(name, scope);
}
}