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を作成したときに最終的に実行されるソースコードです.
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);
        }
    }