jsp:useBeanの使い方


いくつかの使い方がありますが、以下に一つ一つ説明します.
1》
< %@page import="MyBean.*"%>

 
生成されたjavaコードは次のとおりです.
MyBean.TestBean user = null;
      synchronized (session) {
        user = (MyBean.TestBean) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.SESSION_SCOPE);
        if (user == null){
          user = new MyBean.TestBean();
          _jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.SESSION_SCOPE);
        }
      }

 
まずsessionの範囲内からuser属性が存在するかどうかを検索し、存在しない場合、user=new MyBean.TestBean()は、userをセッションに追加します.存在するなら、何もしない.
 
2》
< %@page import="MyBean.*"%>

 
生成されたjavaコードは次のとおりです.
BaseBean user = null;
      synchronized (session) {
        user = (BaseBean) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.SESSION_SCOPE);
        if (user == null){
          user = new MyBean.TestBean();
          _jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.SESSION_SCOPE);
        }
      }

BaseBeanはTestBeanの親です.
userのタイプがBaseBeanであることを除いて、他の処理ロジックは1と同じである.
 
3》
< %@page import="MyBean.*"%>

 
生成されたjavaコードは次のとおりです.
MyBean.BaseBean user = null;
      synchronized (session) {
        user = (MyBean.BaseBean) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.SESSION_SCOPE);
        if (user == null){
          try {
            user = (MyBean.BaseBean) java.beans.Beans.instantiate(this.getClass().getClassLoader(), "MyBean.TestBean");
          } catch (java.lang.ClassNotFoundException exc) {
            throw new InstantiationException(exc.getMessage());
          } catch (java.lang.Exception exc) {
            throw new javax.servlet.ServletException("Cannot create bean of class " + "MyBean.TestBean", exc);
          }
          _jspx_page_context.setAttribute("user", user, javax.servlet.jsp.PageContext.SESSION_SCOPE);
        }
      }

と2』の違いは以下の通りです.
1>newキーを使用する作成ではなくBeansを使用する.instantiateオブジェクトをロードしてインスタンス化する
2>オブジェクトの作成後に強制型変換が行われました(MyBean.BaseBean)
4》
<
%@page import="MyBean.*"%>

生成されたjavaコードは次のとおりです.
MyBean.BaseBean user = null;
      synchronized (session) {
        user = (MyBean.BaseBean) _jspx_page_context.getAttribute("user", javax.servlet.jsp.PageContext.SESSION_SCOPE);
        if (user == null){
          throw new java.lang.InstantiationException("bean user not found within scope");
        }
      }

まずsession範囲内からuser属性を検索し,存在しない場合は異常を直接投げ出し,存在する場合は直接参照する.